【发布时间】:2020-05-02 03:06:18
【问题描述】:
我从 coinlayer 获取了一个 api,它返回的数据是一个对象。我尝试使用 state 创建一个空数组,然后 setState 在那里设置数据,但是当我尝试使用 map 循环遍历它时,生成的错误显示“map is not a function”
来自 api 的数据截图
这是代码
class App extends Component{
state={names:[] }
componentDidMount(){
fetch('http://api.coinlayer.com/live?access_key=c8c0ef65a659c37726364c68e6fdb887&expand=1')
.then((response)=>response.json())
.then((data)=>{
console.log(data.rates);
this.setState({names:data.rates})
})
}
render(){
return(
<div className="Body">
<div className="Navbar"><h1 style={{textAlign:'center'}}>Crypto Dashboard</h1></div>
<DashBoard names={this.state.names} />
</div>
)
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
导出默认应用;
【问题讨论】:
-
数据是对象,不是数组。您不能在对象上使用
.map,只能在数组上使用。如果你想遍历对象,你可以使用Object.keys(this.state.names).map(key => {...}) -
你需要使用
Object.keysdeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/…之类的东西
标签: javascript reactjs loops