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

338
Vistas
Reaccionar: setTimeout no se borra dentro del gancho useEffect

Actualmente, mi aplicación cambia a la página /about de después de 5 segundos de una introducción en la página /home . Quiero romper este tiempo de espera si alguien cambia manualmente la página.

Para esto tengo un estado de introDisplayed que es false por defecto. Al hacer clic en un enlace dentro de la aplicación, la introDisplayed se está convirtiendo en true .

¿Por qué setTimeout dentro de useEffect no se borra? Como referencia, he enumerado todos mis intentos sobre este asunto.

aclaración: he intentado agregar introDisplayed solo a las dependencias dentro de useEffect, así como con history y setIntroDisplayed como lo sugiere eslint y no cambia nada en este caso

 const Page = ({ introDisplayed, setIntroDisplayed }) => { const history = useHistory() const location = useLocation() // useEffect(() => { // if (introDisplayed === false) { // setTimeout(() => { // setIntroDisplayed(true) // history.push("/about") // }, 5000) // } else clearTimeout() // }) // useEffect(() => { // if (introDisplayed === false) { // var timer = setTimeout(() => { // setIntroDisplayed(true) // history.push("/about") // }, 5000) // } else clearTimeout(timer) // }) useEffect(() => { const timer = setTimeout(() => { setIntroDisplayed(true) history.push("/about") }, 1000) if (introDisplayed === true) { return () => clearTimeout(timer) } }) return () }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Creo que te olvidaste de agregar la dependencia en useEffect() .

 useEffect(() => { if(introDisplayed === true) return; const timer = setTimeout(() => { setIntroDisplayed(true) history.push("/about") }, 1000) return () => clearTimeout(timer) }, [introDisplayed])
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