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

119
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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