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

118
Vistas
document.getElementById() no encuentra nada ReactJS

Hola estoy creando una barra de progreso usando ReactJS pero tengo un problema

Mi barra de progreso será un componente React y pasaré el valor de progreso en los accesorios.

Por alguna razón, parece que document.getElementById() no encuentra nada

 import './MyProgressBar.css' const MyProgressBar = (props) => { const value = props.value const progressbar = document.getElementById("hello"); progressbar.style.width = value + "%" return ( <div class="progress"> <div id="hello" class="color"></div> </div> ) } export default MyProgressBar

Lanza un error que dice "No se puede leer la propiedad 'estilo' de nulo en MyProgressBar (MyProgressBar.js:9)...."

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

0

El motivo del error es que el elemento aún no existe cuando lo busca. Podría "arreglar" eso con una devolución de llamada useEffect o useLayoutEffect , pero ese no sería el enfoque de React. Se llamará a su componente para que se vuelva a renderizar cuando cambien los accesorios, así que maneje el renderizado en el nuevo estado directamente:

 const MyProgressBar = ({value}) => { return ( <div class="progress"> <div class="color" style={{width: value + "%"}}></div> </div> ); };

Esto también tiene la ventaja de que puede tener varias instancias de MyProgressBar en la página al mismo tiempo.

Ejemplo en vivo:

 const {useState, useEffect} = React; const MyProgressBar = ({value}) => { return ( <div className="progress"> <div className="color" style={{width: value + "%"}}></div> </div> ); }; const App = () => { const [bar1, setBar1] = useState(0); const [bar2, setBar2] = useState(0); useEffect(() => { const t1 = setInterval(() => { setBar1(b1 => { if (b1 < 100) { ++b1; return b1; } clearInterval(t1); return b1; }); }, 200); const t2 = setInterval(() => { setBar2(b2 => { if (b2 < 100) { ++b2; return b2; } clearInterval(t2); return b2; }); }, 400); }, []); return <div> <div> Every 200ms: <MyProgressBar value={bar1} /> </div> <div> Every 400ms: <MyProgressBar value={bar2} /> </div> </div>; }; ReactDOM.render(<App/>, document.getElementById("root"));
 .color { background-color: blue; height: 100%; } .progress { height: 1em; }
 <div id="root"></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.development.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.development.js"></script>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Este código se ejecuta antes de que haya algo en el DOM.

Puede usarlo dentro de un useEffect, ejecutándose después del renderizado.

 useEffect(() => { const value = props.value const progressbar = document.getElementById("hello"); progressbar.style.width = value + "%"; }, [props.value]);

También puedes usar useRef

about 4 years ago · Juan Pablo Isaza Denunciar

0

Su document.getElementById se ejecuta antes de la representación real, por lo que no pudo encontrar ningún elemento con esa identificación

No se recomienda usar document.getElementById en su código Reactjs, use useRef en su lugar:

 function App() { const divRef = React.useRef(); React.useEffect(() => { console.log(divRef.current); }, []); return ( <div class="progress"> <div ref={divRef} id="hello" class="color"></div> </div> ); } const rootElement = document.getElementById("root"); ReactDOM.render(<App />, rootElement);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script> <div id="root"></div>

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