我需要帮助使用依赖于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
谢谢
2条答案
按热度按时间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()
来解析它。工作演示:
vxbzzdmp2#
1.设置初始化状态默认数组
This.State={covid:[],appliname:“CovidFact”};
1.设置国家/地区
全部遵循: