TypeError:无法读取未定义的属性“map”。我应该修复什么?
2020-06-23
2464
当我尝试从 api 获取一些数据时,我收到错误。
然后我搜索了如何解决此错误,但无法解决。我想解决此错误。 我不知道为什么会出现此错误。 我应该如何修复我的代码?? 请告诉我任何想法。 感谢您的阅读!
这是我的错误。
TypeError: Cannot read property 'map' of undefined
这是我的代码。
import React,{ Component } from 'react';
class Exchange extends Component {
constructor(props){
super(props);
this.state = {
isLoaded: false,
items: [],
}
}
componentDidMount(){
fetch('https://api.exchangeratesapi.io/latest')
.then(res => res.json())
.then(json => {
this.setState({
isLoaded: true,
items: json.items,
})
})
}
render(){
var { items,isLoaded } = this.state;
if(!isLoaded){
return <div>...Loading</div>;
}else{
return (
<div>
<ul>
{items.map(item =>(
<li key={item.rates}>{item.CAD}</li>
))}
</ul>
</div>
)
}
}
}
export default Exchange;
3个回答
我认为你从 api 访问数据的方式是错误的,应该是
this.setState({
isLoaded: true,
items: json.rates //json.rates not json.items
});
并且在渲染它时,映射需要一个数组,因此你必须执行如下操作
<ul>
{Object.keys(items).map(key => (
<li key={key}>{key} - {items[key]}</li>
))}
</ul>
Kalhan.Toress
2020-06-23
json 响应中没有属性
items
。这就是为什么在以下语句之后
items
未定义的原因:
items: json.items
。
此外,
map()
仅适用于数组。您调用的 API 的响应不是数组。
您可以修改代码,例如
this.setState({
isLoaded: true,
items: json,
})
和
<ul>
<li>{items.rates.CAD}</li>
</ul>
Smile
2020-06-23
要更改数组的状态
this.setState({ items: [...this.state.items, itemsArr] })
如果您的 API 响应是数组,则可以按照上述方式操作。
但在您的 API 响应中,它看起来像对象,要将对象推送到数组中 请通过链接进行操作
balaji b r k
2020-06-23