J'essaie de faire des appels API ultérieurs pour obtenir des informations sur certains index financiers. Après chaque appel, je veux mettre à jour de indexObject afin qu'il ait toutes les données de tous les index que j'ai stockés sur les index ...

0
Cayo Eduardo 16 mars 2021 à 16:29

1 réponse

Meilleure réponse

Le problème ici est que vous bouclez la requête, alors que le setState n'est pas synchrone. Il est préférable de renseigner d'abord toutes les données, puis de définir l'état par la suite.

const [indexObject, setIndexObject] = useState({});

const handleFetchData = async () => {
  const indexes = [
    "^GDAXI",
    "^BVSP",
    "^NDX",
    "^DJI",
    "^GSPC",
    "^IBEX",
    "^HSI",
    "^BSESN",
    "^FTSE",
  ];
  const resultData = {};

  for(const index of index) {
    const response = await axios.request(); // add your own request here
    
    resultData[index] = response;
  }

  return resultData;
}

useEffect(() => {
  handleFetchData().then(data => setIndexObject(data));
}, []);

Pourquoi j'utilise for of? car forEach ou .map ne peuvent pas attendre une boucle asynchrone. Ou si vous souhaitez récupérer toutes les données simultanément, vous pouvez envisager d'utiliser Promise.all

1
Devin Ekadeni 16 mars 2021 à 13:48