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

120
Visualizações
Comprensión del comportamiento de useEffect() y re-renderizaciones adicionales

Estaba haciendo algunas pruebas con el siguiente componente ficticio, donde tras la ejecución (en la consola) obtengo el siguiente resultado:

 Rendering: 0 Triggered: 0 Rendering: 4 Triggered: 4 Rendering: 4

Lucho por entender por qué.

Primera representación:

  • establece index en 0 .
  • ejecuta useEffect como undefined no es 0
  • useEffect solicita establecer el index en 4

Segundo render:

  • index es 4
  • ¿Por qué useEffect body se ejecuta de nuevo?

Tercer renderizado:

  • ¿Por qué hay re-renderizado?

Lo que esperaría es:

 Rendering: 0 Triggered: 0 Rendering: 4

¿Me estoy saltando algo muy obvio? ¿Podría por favor ayudarme a entender cómo funciona esto debajo del capó?

 const Example = React.memo(() => { const [index, setIndex] = React.useState(0) console.log('Rendering: ', index) React.useEffect(() => { console.log('Triggered: ', index) setIndex(4) }, [index]) return <h1>{index}</h1> }) ReactDOM.render(<Example />, document.body);
 <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>

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

0

El número de renderizados es realmente correcto. Analicemos lo que sucede:


  1. Representación 0 : esto se encuentra en el primer procesamiento de montaje (en este estado, cada useEffect de uso se ejecuta automáticamente)

  1. Triggered 0 : esta es la activación inicial de useEffect

  1. Representación 4 : esta representación se debe a que estableció el nuevo estado del index en 4

  1. Activado 4 : esto se activa porque cambió index de 0 a 4

  1. Representación 4 : esto se ejecuta porque el estado cambia de 4 a 4 (incluso el valor es el mismo, activará la representación del componente porque React no sabe si estableció el mismo estado y debe ejecutarse nuevamente). En esta representación , useEffect no se ejecuta porque index es 4 nuevamente.

Razón fundamental

Si algo cambia en un componente en cualquier momento, como useState useContext , customHook , ese componente deberá volver a procesarse. Esto también sucede si el componente principal se vuelve a renderizar, el componente secundario se volverá a renderizar incluso si su componente no tuvo ningún cambio.

Sugerencias e información de renderización adicionales

Para evitar que ocurra una reproducción innecesaria de los componentes secundarios, puede usar React.memo , esto volverá a procesar su componente si los accesorios cambian, pero no evitará que su componente se vuelva a procesar si el estado o cualquiera de los ganchos anteriores cambian allí.

Si esto parece redundante, lo parece, pero es necesario para que react esté seguro de que tiene el último estado. Ejecutar JS de esta manera es más rápido que tener una memoria de estado que verifique los cambios y también es más transparente para el desarrollador (y cómo se crea el VDOM )

about 4 years ago · Juan Pablo Isaza Relatório

0

No se puede lograr el resultado esperado.

useEffect se procesa cuando se monta el componente y cada vez que se vuelve a procesar cuando cambia el estado (índice).

 const Example = () => { const [index, setIndex] = React.useState(0) console.log('Rendering: ', index) React.useEffect(() => { console.log('Triggered: ', index) setIndex(4) }, [index]) return <h1>{index}</h1> }

Producción:

  • Representación: 0 => Cuando el componente se monta por primera vez, ese índice de tiempo es 0
  • Activado: 0 => En el montaje useEffect dispara y actualiza el estado (0 a 4)
  • Renderizado: 4 => Componente vuelto a renderizar porque el estado ha cambiado de (0 a 4)
  • Activado: 4 => useEffect reactivado porque el estado ha cambiado (0 a 4)
  • Renderizado: 4 => Componente vuelto a renderizar porque para verificar si el estado ha cambiado o no (4 a 4, tipo de confirmación, nada cambió )
about 4 years ago · Juan Pablo Isaza Relatório

0

La forma en que funciona useEffect es que solo se ejecuta después de que se procesa el componente de la página.

Espero que esto te ayude a entender.

El primer índice de renderizado es 0.

 Rendering: 0

Activa el useEffect.

 Triggered: 0

El índice se actualiza en useEffect pero no en el componente. Luego render actualiza el índice a 4.

 Rendering: 4

useEffect se ejecuta porque el índice ha cambiado.

 Triggered: 4

El componente se vuelve a representar pero el índice sigue siendo 4, por lo que useEffect no se ejecutará nuevamente.

 Rendering: 4
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