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

126
Visualizações
¿Por qué React useState hook desencadena una nueva representación antes de que se ejecute el código restante?

Estoy tratando de averiguar cuándo se produce la nueva representación al actualizar el estado en React con useState hook. En el siguiente código, al hacer clic en el botón se activa la función handleClick que contiene un setTimeout. La devolución de llamada dentro de setTimeout se ejecuta después de 1 segundo, lo que actualiza el conteo de la variable de estado llamando a setCount. Luego, un registro de la consola imprime un mensaje.

El orden en el que espero que aparezcan los registros de la consola una vez que se hace clic en el botón es:

  1. 'Contar antes de actualizar', 0
  2. 'Contar actualización de publicación en setTimeout', 0
  3. 'Contar en render', 1

Sin embargo, el orden que veo después de ejecutar este código es:

  1. 'Contar antes de actualizar', 0
  2. 'Contar en render', 1
  3. 'Contar actualización de publicación en setTimeout', 0

¿Cómo es que aparece "'Count in render', 1" antes de "'Count post update in setTimeout', 0"? ¿SetCount no da como resultado la programación de una nueva representación que no es inmediata? ¿No debería la consola iniciar sesión inmediatamente después de que la llamada a la función setCount siempre se ejecute antes de que se active la nueva representación?

 function AppFunctional() { const [count, setCount] = React.useState(0); const handleClick = () => { console.log('Count before update', count); setTimeout(() => { setCount(count + 1); console.log('Count post update in setTimeout', count); }, 1000); }; console.log('Count in render', count); return ( <div className="container"> <h1>Hello Functional Component!</h1> <p>Press button to see the magic :)</p> <button onClick={handleClick}>Increment</button> {!!count && ( <div className="message">You pressed button {count} times</div> )} </div> ); } ReactDOM.render(<AppFunctional />, 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>

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

¿setCount no da como resultado la programación de una nueva representación que no es inmediata? ¿No debería la consola iniciar sesión inmediatamente después de que la llamada a la función setCount siempre se ejecute antes de que se active la nueva representación?

Bajo el capó, React optimiza las re-renderizaciones al ponerlas en cola y agruparlas en lotes cuando puede determinar que es seguro hacerlo . Cuando está en una función que React entiende (como un componente funcional o una devolución de llamada de gancho), si llama a un setter de estado en una de esas funciones, React sabrá que es seguro retrasar la actualización de estado hasta que finalice su procesamiento, por ejemplo , hasta que se hayan ejecutado todas las devoluciones de llamada de efectos/notas/etc., y hasta que todos los componentes del estado original se hayan pintado en la pantalla.

Pero cuando llama a una actualización de estado fuera de una función React incorporada, React no sabe lo suficiente sobre su comportamiento para saber cuándo podrá volver a renderizarse a continuación si retrasa la actualización de estado. La llamada setTimeout no se llama desde dentro del ciclo de vida de React, por lo que es mucho más difícil agrupar actualizaciones y optimizarlas, por lo que, en lugar de que React intente adivinar cómo podría hacerse de forma segura y asincrónica, se vuelve a procesar de inmediato.

over 4 years ago · Santiago Trujillo 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