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

181
Vistas
React Hooks: ¿Por qué tengo esta salida?

Estoy estudiando los ganchos de React pero no puedo entender por qué obtuve esta salida en la consola. Alguien con gran corazón podría explicar en detalle la "ejecución en ejecución" oh estos ganchos?

 import { useState, useEffect } from "react"; function Homepage() { const [state, setState] = useState(); useEffect(() => { console.log("useEffect"); console.log("useEffect not executed"); setState("hello") }, []); if (!state) { console.log("state not defined"); return <div>State undefined</div>; } return <div>ciao</div>; } export default Homepage;

salida de la consola: estado no definido estado no definido useEffect useEffect no ejecutado useEffect useEffect no ejecutado

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Básicamente es una combinación de React.StrictMode invoca dos veces el cuerpo de la función como una forma de ayudarlo a detectar efectos secundarios inesperados.

El modo estricto no puede detectar automáticamente los efectos secundarios, pero puede ayudarlo a detectarlos haciéndolos un poco más deterministas. Esto se hace mediante una doble invocación intencional de las siguientes funciones:

  • Métodos constructor de componentes de clase, render y shouldComponentUpdate
  • Componente de clase método estático getDerivedStateFromProps
  • Cuerpos de componentes de función <-- esto
  • Funciones de actualización de estado (el primer argumento de setState )
  • Funciones pasadas a useState , useMemo o useReducer

volver a montar el componente para garantizar el estado reutilizable

Para ayudar a sacar a la luz estos problemas, React 18 presenta una nueva verificación solo para desarrollo en el modo estricto. Esta nueva verificación desmontará y volverá a montar automáticamente cada componente, siempre que un componente se monte por primera vez, restaurando el estado anterior en el segundo montaje.

y el gancho useEffect se llama al final del ciclo de renderizado.

 function Homepage() { const [state, setState] = useState(); useEffect(() => { console.log("useEffect"); // logs second as expected side-effect console.log("useEffect not executed"); setState("hello"); }, []); if (!state) { console.log("state not defined"); // logs first as unintentional side-effect return <div>State undefined</div>; } return <div>ciao</div>; }

...

 import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import Homepage from "./Homepage"; const rootElement = document.getElementById("root"); const root = createRoot(rootElement); root.render( <StrictMode> <Homepage /> </StrictMode> );

Explicando los registros

salida de la consola:

 state not defined // <-- initial render state not defined // <-- double invocation of function body useEffect // <-- effect at end of initial render useEffect not executed // <-- effect at end of initial render

...desmontar/montar

 useEffect // <-- effect at end of render useEffect not executed // <-- effect at end of render
about 4 years ago · Juan Pablo Isaza Denunciar

0

useEffect se ejecuta cuando la página se procesa y las otras funciones se ejecutan antes useEffect , por lo que su código ejecuta if (!state) primero, luego useEffect se ejecuta y el estado se establece en "hola"; aquí hay un enlace para comprender completamente el gancho useEffect: useEffect ; Buena suerte;

about 4 years ago · Juan Pablo Isaza Denunciar

0

su instrucción if se ejecuta antes de useEffect, incluso si está después, debe colocar ambos divs dentro de return y eliminar if

 return ( {!state ? <div>State undefined</div> : <div>ciao</div>} )
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