Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

411
Vistas
Convertir de getElementById a useRef en REact

Hay un componente funcional implementado con getElementById y debe actualizarse para usar useRef hook.

Codigo original:

 import React, { useState, useEffect, useRef } from 'react'; import { createPortal } from 'react-dom'; const MyComponent: React.FunctionComponent<MyComponentProps> = ({ myDefaultElement = 'default-element', }) => { const [elementOutlet, setElementOutlet] = useState<HTMLOListElement>(); useEffect(() => { const refElement = document.getElementById(myDefaultElement) as HTMLOListElement; if (refElement) { setElementOutlet(refElement); } }, [myDefaultElement]); return createPortal( <li> // something </li>, elementOutlet ); };

el código anterior funciona bien, el único cambio que hice fue la primera línea dentro de useEffect.

De:

 const refElement = document.getElementById(myDefaultElement) as HTMLOListElement;

A:

 const refElement = useRef(myDefaultElement) as HTMLOListElement;

Al pasar el cursor sobre la nueva línea, dice:

React Hook "useRef" no se puede llamar dentro de una devolución de llamada. Los React Hooks deben llamarse en un componente de función React o en una función React Hook personalizada

¿Hay alguna manera de hacer que ref funcione bien dentro de useEffect?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No puede llamar a useRef dentro de un efecto, verifique la regla de los ganchos . Prueba algo como esto

 const Component = () =>{ const node = useRef(null) useEffect(() =>{ // current will never be null here, since this effect will // only run after the first mount and therefore after refs // appending setElementOutlet(node.current) },[]) return <div ref={node} /> }

Las referencias ya tienen una firma estable garantizada por el ciclo de vida de react, por lo que no tiene que declararla como una dependencia dentro de su efecto.


A juzgar por su ejemplo, solo está recibiendo una id como accesorios, no el nodo en sí. Tienes dos opciones:

  • Continúe recibiendo la identificación del elemento y llamando a getElementById (no hay nada de malo en eso) y luego agregue el nodo montado dentro de una referencia
 const Component = ({ id }) =>{ const node = useRef(document.getElementById(id)) useEffect(() =>{ const el = document.getElementById(id) if(el) node.current = el },[id]) }
  • Reciba toda la referencia como accesorios
 const ParentComponent = () =>{ const node = useRef(null) return( <> <Component childRef={node} /> <div ref={node} /> </> ) } const Component = ({ childRef }) =>{ ... }

Saludos compañero olister.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda