Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

161
Visualizações
establecer el estado dentro del useEffect con ese estado como una dependencia

Digamos que tengo este código aquí:

 const [a , setA] = useState(false); useEffect(() => { setA(true); setTimeout(()=>{ setA(false); },300); },[a]);

Tengo dos preguntas:

1) ¿Esto creará un bucle infinito (si estoy usando ese mismo estado como dependencia)?

2) Si configuro el estado en medio del código useEffect, el componente se vuelve a procesar inmediatamente, entonces, ¿cuándo se ejecutará el resto del código si el componente se procesa antes de que lleguemos a él dentro del useEffect? ¿Cuándo sucederá el setA(false) ?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Si corrige la sintaxis ( setTimeOut debe escribirse correctamente), sí, eso provocará un bucle infinito.

 const App = () => { console.log('rendering'); const [a , setA] = React.useState(false); React.useEffect(() => { setA(true); setTimeout(()=>{ setA(false); },300); },[a]); return 'foo'; }; ReactDOM.render(<App />, document.querySelector('.react'));
 <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> <div class='react'></div>

Si configuro el estado en medio del código useEffect, el componente se vuelve a procesar inmediatamente, entonces, ¿cuándo se ejecutará el resto del código si el componente se procesa antes de que lleguemos a él dentro del useEffect? ¿Cuándo sucederá el setA (falso)?

Ocurrirá tal como estaba programado originalmente: 300 milisegundos después de que se ejecute originalmente el gancho. Cuando el componente se vuelva a montar, no cancelará ni cambiará los tiempos de espera en curso que podrían haber creado los renderizados anteriores, a menos que haya escrito código específicamente para manejar esa posibilidad.

  1. El componente se monta o tiene setA llamado
  2. El componente (re)renderiza
  3. El gancho de efecto corre
  4. Si el gancho de efecto finalmente llama a setTimeout , la devolución de llamada de tiempo de espera se ejecutará independientemente, exactamente a la hora programada, sin importar qué otro código haya, siempre que no llame a clearTimeout . Si establece el estado además de llamar a setTimeout , eso no tiene efecto en el tiempo de espera. (que es algo importante a tener en cuenta: los cierres obsoletos son un problema común con el que se encuentran las personas con React)
about 4 years ago · Juan Pablo Isaza Relatório

0

Si configuro el estado en medio del código useEffect, el componente se vuelve a procesar inmediatamente, entonces, ¿cuándo se ejecutará el resto del código si el componente se procesa antes de que lleguemos a él dentro del useEffect? ¿Cuándo sucederá el setA (falso)?

No, no volverá a procesar el componente en medio de useEffect incluso si configura el estado. El enlace useState se ejecuta de forma asíncrona. Estará en cola.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda