Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

177
Views
No se puede encontrar el nombre "offsetHeight" o "clientHeight" en un proyecto React/Next.js TypeScript

Tengo un componente de preguntas frecuentes plegable personalizado que se basa en la altura del elemento cuando se expande y viceversa.

 import { useState, useRef, useEffect } from "react"; export default FAQItem({title, description}: FAQItemProps) { const [isOpen, setIsOpen] = useState(false); const heightRef = useRef<HTMLDivElement>(null); const collapsible = () => (!isOpen ? setIsOpen(true) : setIsOpen(false)); useEffect(() => { !isOpen ? (heightRef.current!.style.height = "96px") : (heightRef.current!.style.height = `${offsetHeight}px`) }, [isOpen]); return( <div ref={heightRef}> <h2 onClick={collapsible}>{title}</h2> <p>{description}</p> </div> ) }

Debido a que estoy tratando con TypeScript, algunas de las soluciones ya respondidas que pude encontrar lamentablemente no tienen ninguna respuesta relacionada con TypeScript y no funcionarán con TS y tuve que agregar definiciones de tipo. Y volvió con el error Cannot find name "offsetHeight". y clientHeight hace lo mismo.

Intenté agregar any a offsetHeight, que incluye:

 declare const window: Window & typeof globalThis & { offsetHeight: number | any; }

... y como era de esperar, el error desapareció pero no funcionó: la altura no cambió y no se expandirá.

Sin embargo, todas las soluciones que pude encontrar lamentablemente no tienen respuestas relacionadas con TypeScript con respecto a obtener el ancho o la altura de un elemento en un proyecto de React TypeScript; todas ellas son simplemente preguntas de React sin TypeScript, y prefiero no usar bibliotecas externas. de cualquier tipo tampoco.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

La razón por la que recibe el error es porque no ha definido las variables offsetHeight y clientHeight . Ahora, sé que no necesita definirlas, pero debido a que su uso es incorrecto, el compilador cree que olvidó crear estas variables.

Esto es lo que desea: heightRef.current?.clientHeight y heightRef.current?.offsetHeight , el ? es solo para evitar errores en caso de que la ref no esté cargada.

Editar con código

 import "./styles.css"; import React from "react"; export default function App() { const [isOpen, setIsOpen] = React.useState(false); const heightRef = React.useRef<HTMLDivElement>(null); const collapsible = () => setIsOpen(!isOpen); console.log(isOpen, heightRef.current?.style?.height); React.useLayoutEffect(() => { if (isOpen) { heightRef.current?.style.height = `${heightRef.current?.offsetHeight}px`; } else { heightRef.current?.style.height = "96px"; } }, [isOpen]); return ( <div className="App" ref={heightRef} style={{height: 1100}}> <h1 onClick={collapsible}>Hello CodeSandbox</h1> <h2>Start editing to see some magic happen!</h2> </div> ); }

¡Acepte la respuesta si le ayuda! ¡Gracias!

about 4 years ago · Juan Pablo Isaza Report

0

Parece que aún no ha definido la variable offsetHeight haciendo referencia a ella aquí

 (heightRef.current!.style.height = '${offsetHeight}px')

es por eso que mecanografiado está gritando. Aunque no necesitamos definir esto, en lugar de eso, tome el valor haciendo esto heightRef.current.offsetHeight .

También en lugar de asignar así heightRef.current!.style.height = "96px" haz esto (heightRef.current?.style.height = "96px") . ¡Hasta donde yo sé, no existe tal operador !. en javascript.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!