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

286
Vistas
Congelación de la aplicación React causada por una función que se ejecuta constantemente

Esta página de mi aplicación de reacción contiene la función createBubbles, que funciona bien. El problema es que cuando voy a otra página después de visitar esta, toda la aplicación se congela.

Estos son los errores que muestra la consola, lo intenté con window.onloand pero no funciona.

 function createBubbles(){ const section = document.querySelector('section'); const createElement = document.createElement('span'); var size = Math.random() * 60; createElement.style.width = size + 'px'; createElement.style.height = size + 'px'; createElement.style.left = Math.random() * innerWidth + 'px'; window.onload=section.appendChild(createElement); setTimeout(() => { createElement.remove(); },4000) } setInterval(createBubbles,50);

BrowserConsoleErrors

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

0

necesita borrar su intervalo en el desmontaje del componente.

 const interval = setInterval(createBubbles,50); useEffect(() => { return () => { clearInterval(interval) } }, [])
about 4 years ago · Juan Pablo Isaza Denunciar

0

Ese error ocurre porque cuando desmonta ese componente navegando a otra ruta de componente, su cola de bucle de eventos aún está llena de funciones para ejecutar, ya que setInterval aún está activo, pero el nodo DOM que está seleccionando para agregar las burbujas ya no existe. .

  • Al usar setTimeout, detectores de eventos, setInterval, etc... en React, debe colocar la ejecución dentro de un useEffect y debe asegurarse de limpiar el intervalo, el detector de eventos, el tiempo de espera, etc... en el desmontaje, lo logra al regresar de useEffect una función que realiza el borrado:

  • Para usar los nodos DOM directamente, no use los selectores JS de vainilla, pero use una referencia.

     export default function App() { const sectionRef = useRef(); useEffect(() => { function createBubbles() { const section = sectionRef.current; const createElement = document.createElement('span'); const size = getRandom(60); const innerWidth = window.innerWidth; const innerHeight = window.innerHeight; createElement.style.backgroundColor = `rgba(${getRandom(255)},${getRandom(255)},${getRandom(255)})`; createElement.style.width = size + 'px'; createElement.style.height = size + 'px'; createElement.style.left = Math.random() * innerWidth + 'px'; createElement.style.top = Math.random() * innerHeight + 'px'; if (section) { section.appendChild(createElement); setTimeout(() => { createElement.remove(); }, 4000); } } const interval = setInterval(createBubbles, 50); return () => clearInterval(interval); }, []); return <section ref={sectionRef}></section>; } function getRandom(max) { return Math.random() * max; }

Un ejemplo de trabajo https://stackblitz.com/edit/react-959lni?file=src%2FApp.js

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