【问题标题】:React Hooks, API, AxiosReact Hooks、API、Axios
【发布时间】:2021-04-19 22:08:44
【问题描述】:

我的 axios api 调用有问题,我在同一个函数中使用 2 个 api,这两个 axios 调用单独运行良好,但是当我将它们结合起来时,我将在 Country 组件中遇到错误发布后,错误是(地图不是函数)

const onSerializeData = () => { 
    const serializedCountries = serializeCountries(selectedCountries, false);
    //Print the Countries
    console.log(
      `Selected Countries: \n ${JSON.stringify(serializedCountries)}`
    );
    
    axios
      .get(
        `https://restcountries.eu/rest/v2/alpha/${
          serializedCountries[serializedCountries.length - 1]
        }`
      )
      .then((responose) => {
        const CouAllData = responose.data;
        console.log("CouAllData", CouAllData);
        setCountryAllData([...CountryAllData, CouAllData]);
      })
      .catch((error) => {
        console.log("Error", error);
      });
      axios
      .get(
        `https://corona-api.com/countries/${
          serializedCountries[serializedCountries.length - 1]
        }`
      )
      .then((responose) => {
        const CouData = responose.data.data; //The Data
        setCountryData([...CountryData, CouData]); //set The Data to the OBJ
        console.log(" setCountryData", CountryData);
      })
      .catch((error) => {
        console.log("Error", error);
      });
  };
return (
<div>
<Country countries={CountryData} /> 
      <Country countriesAll={CountryAllData} /></div>
}

国家组成部分

const DataGroup = this.props.countries.map((county) => {
      return <Data info={county} />;
    });

    const DataGroupAll = this.props.countriesAll.map((country) => {
      return <Data infos={country} />;
    });

    return (
      <div>
         {DataGroup}
         {DataGroupAll}
      </div>

数据组件

 <h1>Name : {this.props.info.code}</h1>
        <h1>Date : {this.props.info.updated_at}</h1>
<h1>Name : {this.props.infos.name}</h1>
        <h1>Capital : {this.props.infos.capital}</h1>

【问题讨论】:

  • 通常,当您收到 .map() is not a function 错误时,这意味着您尝试映射的任何内容都不是数组。那么this.props.countries 是一个数组吗?
  • 是的,它实际上是一个数组,我将它初始化为一个空数组,然后将信息传递给它
  • 您需要提供更完整的上下文来说明您正在尝试做的事情。基于sn-ps的代码很难进行故障排除。例如,您如何调用 onSerializeData 函数?除了它的声明之外,我没有看到任何对它的引用。

标签: reactjs api axios


【解决方案1】:

尝试使用axios.all() 执行并发请求。

function getCountries() {
  return axios.get(
    `https://restcountries.eu/rest/v2/alpha/${
      serializedCountries[serializedCountries.length - 1]
    }`
  )
}

function getCountries2() {
  return axios.get(
    `https://corona-api.com/countries/${
      serializedCountries[serializedCountries.length - 1]
    }`
  )
}

Promise.all([getCountries(), getCountries2()])
  .then(function (results) {
    const countries = results[0];
    const countries2 = results[1];
  });

【讨论】:

  • 我应该把setSteat放在哪里>> const CouAllData = responose.data; setCountryAllData([...CountryAllData, CouAllData]);
  • .then()返回的promise中
  • 我试过你给我的代码,但它给了我同样的错误
猜你喜欢
  • 2019-10-30
  • 2019-10-15
  • 2021-07-02
  • 2021-10-24
  • 2019-08-26
  • 2021-06-24
  • 2020-08-20
  • 2021-05-08
  • 2020-11-19
相关资源
最近更新 更多