javascript - 如何使用 API 内部的 API URL 将对象添加到数组中?

标签 javascript reactjs axios

我有以下代码:

import React, { Component } from "react";
import NavigationBar from "../../Components/NavigationBar/NavigationBar";
import PokemonCard from "../../Components/PokemonCard/PokemonCard";
// import { Container } from './styles';
import api from "../../config/api";

export default class Listagem extends Component {
  constructor(){
    super()
    this.state = {
      pokemons: []
    };
  }
  
  

   async componentDidMount() {
    //Popula array de Pokemons
      await api.get("https://pokeapi.co/api/v2/pokemon").then(res => {
      const pokemonsArray = res.data.results;
      const pokemonData = [];
      //Vai dentro do array e busca informações que estão na URL do objeto
      pokemonsArray.forEach(pokemon => {
         api.get(pokemon.url).then(res => {
          pokemonData.push({
            name: res.data.name,
            moves: res.data.moves,
            types: res.data.types,
            image: res.data.sprites.front_default
          });
        });
      });
      // console.log(res)
      this.setState({ pokemons: pokemonData });
      // console.log(this.state.pokemons)
    });
  }

  render() {
    console.log(this.state.pokemons)
    return ( 
      <div>
        <NavigationBar />
        {this.state.pokemons.map(pokemon => (
          <PokemonCard pokemon={pokemon} />
        ))}
      </div>
    );
  }
}

我正在尝试从 api.get 内的 URL 获取数据,但我不知道如何使用返回的数据更改状态。

当我尝试控制台记录“this.state.pokemons”时,我得到了 2 个数组。一个是空的,另一个是我需要的数据。所以我无法渲染该组件。 This is the output on the chrome console

提前致谢。这可能是一个愚蠢的问题,但我一整天都被困在这个问题上。

最佳答案

我认为您还应该为内部 API 调用添加 async/await ,以便您能够在 pokemonData 数组中获取数据,

pokemonsArray.forEach(async pokemon => {
     await api.get(pokemon.url).then(res => {
       pokemonData.push({
          name: res.data.name,
          moves: res.data.moves,
          types: res.data.types,
          image: res.data.sprites.front_default
       });
     });
})

关于javascript - 如何使用 API 内部的 API URL 将对象添加到数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58496267/

相关文章:

javascript - 如何将参数从 Flame.js 小部件传递到 ember 函数

Javascript 对象引用种类的最后一个对象而不是自身

javascript - 检测哪个 CSS 动画刚刚在 JavaScript 中结束?

javascript - 自定义迭代器方法在渲染中不起作用

javascript - react 函数和事件

javascript - axios POST 上的 PHP Post 数组为空

javascript - 从node js服务器向客户端发送axios post请求错误消息

javascript - 下拉价格过滤器

javascript - ReactJS使用Ionic Uncaught TypeError : Cannot read property 'map' of undefined from axios request

javascript - jQuery ajax 工作但 axios 给出 CORS 错误