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

146
Visualizações
La solicitud de Axios sigue regresando dos veces sin definir y el doble de datos

Estoy tratando de obtener una API en un enlace personalizado de reactjs usando Axios. Sigo obteniendo el doble de respuesta como indefinido y luego el doble como una recuperación exitosa con los datos. El indefinido rompe mi aplicación.

Por cierto, estoy obteniendo de la API de usuario aleatorio.

 import axios from "axios"; import { useState, useEffect } from "react" export const useFetch = (url) => { const [loading, setLoading] = useState(false); const [data, setData] = useState([]); const [error, setError] = useState('') const getData = () => { setLoading(true) try { axios.get(url) .then(response => setData(response.data)); setLoading(false) } catch (error) { setError(error) } }; useEffect(() => { getData() }, [url]) return {loading, data, error} }

Tratando de usarlo aquí y mapearlo

 import React, { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; import { useFetch } from '../custom_hooks/useFetch'; const PersonDetails = () => { const { loading, data , error } = useFetch('https://randomuser.me/api?results=20'); const { results } = data; const { id } = useParams(); const [person, setPerson] = useState({}) useEffect(() => { const newPerson = results?.find(person => person.login.uuid === parseInt(id)) setPerson(newPerson) console.log(newPerson) }, []) return ( <div> {person.name.first} </div> ) } export default PersonDetails

Esto es lo que realmente estoy tratando de hacer, pero ahora, debido a que no está definido, me sale que no puede leer las propiedades de undefined...

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

0

  1. debe definir la función getData dentro del efecto de uso o pasarla en la matriz de dependencia y envolver la función mediante devolución de llamada para evitar representaciones innecesarias.
  2. debe usar abortcontroller en caso de cancelaciones y tener la función de limpieza en efecto. (en este caso es mejor definir getdata body en useeffect)
 useEffect(() => { const controller = new AbortController(); const getData = async () => { setLoading(true) try { await axios.get(url, {signal: controller.signal}) .then(response => setData(response.data)); } catch (error) { setError(error) } } getData() return()=>controller.abort() },[url]}

puede leer más sobre cómo obtener datos con ganchos en la siguiente URL y dónde configurar la carga y otros estados necesarios. https://www.robinwieruch.de/react-hooks-fetch-data/

about 4 years ago · Juan Pablo Isaza Relatório

0

Cuando el efecto te corre:

  1. setLoading(true)
  2. Enviar la solicitud de Ajax
  3. setLoading(false)

Más tarde, te llega la respuesta de Ajax:

  1. setData(response.data)

Dado que depende de la loading para determinar si data están configurados o no, se rompe.

Hay dos cosas que podrías hacer:

  1. Mueva setLoading(false) dentro de la devolución de llamada para que no se configure hasta then de haber setData(response.data)
  2. Deshágase de loading por completo y base su lógica en que los data no estén undefined o tengan un valor diferente.
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