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

201
Visualizações
La solicitud de obtención de useEffect está extrayendo datos dos veces

Lo que quiero:

Extraigo datos de una api y luego configuro los datos en state . Hice esto dentro de un gancho useEffect , pero cuando consola.log los datos después, muestra los datos dos veces, a veces 4 veces. No sé por qué sucede esto.

Lo que he probado:

  • console.log dentro de useEffect para ver los datos de la fuente
  • deshabilitar las herramientas de desarrollo de reacción dentro de Chrome.

Mi código:

 // make api call, assign response to data state const [apiData, setApiData] = useState(); useEffect(() => { async function fetchData() { try { await fetch('https://restcountries.com/v3.1/all') .then(response => response.json()) .then(data => setApiData(data)); } catch (e) { console.error('Error fetching api data', e); }; }; fetchData(); }, []); console.log(apiData);

Resultado de console.log :

captura de pantalla de error

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

0

Si está utilizando React versión 18+, StrictMode tiene un cambio de comportamiento. Antes no estaba ejecutando los efectos dos veces, ahora lo hace para comprobar si hay errores. (En realidad, monta y vuelve a montar, lo que hace que los efectos de renderizado iniciales se disparen dos veces)

https://reactjs.org/blog/2022/03/29/react-v18.html#nuevos-comportamientos-en-modo-estricto

about 4 years ago · Juan Pablo Isaza Relatório

0

Como se mencionó en el otro comentario, esto se debe a que los efectos se "invocan doblemente" en modo estricto.

Una solución común y que creo que ha sido sugerida por el equipo de React (aunque estoy luchando por encontrar dónde leí esto) es usar useRef .

 // make api call, assign response to data state const [apiData, setApiData] = useState(); const hasFetchedData = useRef(false); useEffect(() => { async function fetchData() { try { await fetch('https://restcountries.com/v3.1/all') .then(response => response.json()) .then(data => setApiData(data)); } catch (e) { console.error('Error fetching api data', e); }; }; if (hasFetchedData.current === false) { fetchData(); hasFetchedData.current = true; } }, []);
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