Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

410
Views
UseEffect siendo llamado varias veces

Pensé que useEffect se llama una vez solo después de renderizar, pero se ejecuta varias veces y no en el orden que esperaba.

Esperaba que enviara un mensaje de 'carga de datos' mientras la recuperación está en progreso y luego, una vez que se realiza la recuperación, renderice el campo de título y alerte "... Listo ..." una vez y ese debería ser el final.

Agregué ALERT y registros de la consola en los dos puntos para determinar el flujo y tanto las alertas como los registros de la consola aparecen más de una vez y en diferentes órdenes. ¿Podría ejecutar este código y ver el comportamiento? Mantuve la matriz del segundo argumento como nula para que se ejecute solo una vez, pero no ayuda.

Aclare si reaccionar RENDER significa MOSTRAR en pantalla. ¿Qué etapa indica LOAD? ¿Cuándo se hace la exhibición?

el código sigue:

 import React, { useEffect, useState } from "react"; //import "./App.css"; function DemoFetchZ() { let data = { title: "Waiting for Data" }; const [todo, setTodo] = useState(data); const [isData, setData] = useState(false); const [isFetching, setFetching] = useState(false); useEffect(() => { // called after the first render async function fetchData() { setFetching(true); const response = await fetch( "https://jsonplaceholder.typicode.com/todos/1" ); console.log("response = ", response); let data = await response.json(); setTodo(data); //updt state setFetching(false); setData(true) console.log("Data = ", data); } fetchData(); }, []); //[isData] null value will execute once only? if (isFetching) { console.log("data loading ......") alert ("data loading") return (<div>...Data Loading.....</div>); } return ( <div> - Fetch <br /> {alert("..DONE...")} <span>Title: {todo.title}</span> </div> ); } export default DemoFetchZ;
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Su useEffect se ejecuta solo una vez por ciclo de renderizado, pero tiene varias actualizaciones de estado en su useEffect que provocan una nueva renderización. Por lo tanto, recibe muchas alertas.

Vea una demostración de su código y vea los registros de la consola, así como los comentarios.

También tenga en cuenta que useEffect

  • cuando proporciona una dependencia de matriz vacía, su useEffect se ejecuta una vez
  • cuando tiene algún valor como dependencia (por ejemplo: [name] ), su useEffect se ejecuta cuando cambia el estado/propiedad del nombre
  • useEffect se ejecuta en cada renderizado si no pasa la matriz de dependencia.

Leer aquí en volver a renderizar

over 4 years ago · Santiago Trujillo Report

0

refactorizarlo así.

 import React, { useEffect, useState } from "react"; //import "./App.css"; const DemoFetchZ = () => { const [todo, setTodo] = useState({}); const [loading, setLoading] = useState(false); useEffect(() => { fetchData(); }, []); const fetchData = () => { setLoading(true); fetch("https://jsonplaceholder.typicode.com/todos/1") .then((response) => response.json()) .then((data) => { setTodo(data); setLoading(false); }) .catch((error) => { console.log(error); setLoading(false); }); }; return ( <> {loading ? ( <div>...Data Loading.....</div> ) : ( <div> - Fetch <br /> <span>Title: {todo ? todo.title : "no Title Found"}</span> </div> )} </> ); }; export default DemoFetchZ;
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!