需要帮助获取具有Axios依赖项的JSON数据以进行React

mzsu5hc0  于 2022-10-21  发布在  iOS
关注(0)|答案(2)|浏览(126)

我需要帮助使用依赖于React的AXIOS。我正在从这个终结点获取数据:https://api.covid19api.com/summary
我为我的API(config.jsx)设置了一个配置

import axios from 'axios';

export default axios.create({   
    baseURL: `https://api.covid19api.com/summary`,
    responseType: "json" 
});

然后我在我的应用程序中调用它,(一个类组件)作为API

import API from './config.jsx';

并在我的ComponentDidmount()中执行它

componentDidMount() {
    API.get().then(res => {     
      const countries = JSON.stringify(res.data.Countries);
      //console.log(countries);
      this.setState({ covid: countries });
      console.log(`Etat du state:  ${this.state.covid}`);
    })
}

我获取数据,并将其存储在名为‘covid’的状态中,但是当涉及到Map结果时,我得到一个错误“TypeError Cannot Read Property‘map’of NULL”我认为我必须将数据转换为数组,但我不知道该如何做。

render() {
    return (
      <div className="App">
        <header className="App-header">
          <h1>{this.state.appliname}</h1>

          {this.state.covid.map(item => (
            <div>{item.Country}</div>
          ))}

        </header>
      </div>
    );
  }

以下是有关codesandbox的完整脚本:https://codesandbox.io/s/intelligent-faraday-ykewv?file=/src/App.js
谢谢

fcg9iug3

fcg9iug31#

您需要考虑以下几点:
1.始终处理承诺中的错误。有时您可能会遇到API失败,所以您应该处理API请求失败,这是我们应该做的。因此,只需将catch处理程序添加到您的承诺链中即可。
1.应始终处理第一次数据发起。在页面的第一次呈现中,没有this.state.covid,因此您无法将其传递给您的视图并通过它进行Map,因此如果这样做,将抛出一个错误。要实现这一点,应该将conditional rendering添加到元素中。
1.正确定义您的第一个状态初始化。因为您希望this.state.covid是一个数组,所以您应该首先将其定义为一个数组(this.state = {covid: []})。
1.避免将string传递给Array#map。当您尝试使用JSON.stringify(res.data.Countries)将传入项从API转换为JSON时,它会将您的数据转换为JSON。因为JSON带有字符串类型,所以它不适合像Array#map这样的数组助手,当您获得数据时,就没有必要将JSON变成。如果在任何情况下,传入的数据都是JSON本身,则应该使用JSON.parse()来解析它。

工作演示

vxbzzdmp

vxbzzdmp2#

1.设置初始化状态默认数组
This.State={covid:[],appliname:“CovidFact”};
1.设置国家/地区

const countries = res.data.Countries;

全部遵循:

import React from "react";
import "./App.css";
import API from "./config.jsx";

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      covid: [],
      appliname: "CovidFacts"
    };
  }

  componentDidMount() {
    API.get().then(res => {
      const countries = res.data.Countries;
      this.setState({ covid: countries });
      console.log(`Etat du state:  ${this.state.covid}`);
    });
  }
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <h1>{this.state.appliname}</h1>
          {this.state.covid.map(item => (
            <div>{item.Country}</div>
          ))}
        </header>
      </div>
    );
  }
}

export default App;

相关问题