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

180
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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