【问题标题】:React -looping through an array of objectsReact 循环遍历对象数组
【发布时间】: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>

导出默认应用;

【问题讨论】:

标签: javascript reactjs loops


【解决方案1】:

您正在尝试使用对象,而不是数组。

你可以使用Object.keyshttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

例如

    fetch('http://api.coinlayer.com/live?access_key=c8c0ef65a659c37726364c68e6fdb887&expand=1')
    .then((response)=>response.json())
    .then((data)=>{
      let names = [
      Object.keys(data).forEach(key => {
        names.push(data[key]) // Push the values to the array
        names.push(key]) // Or push the key to the array (whatever you need)
      })
      this.setState({ names })
    })

还有很多其他方法可以做到这一点。

【讨论】:

  • 谢谢,它起作用了。但是,当来自 api 的对象没有 id number 属性时,我如何为我的列表提供唯一键?
  • @Akanimo 这是另一个问题,您可以在此论坛上找到答案。如果我回答了您的问题,请将其标记为已接受。
猜你喜欢
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 2017-01-29
  • 2015-10-15
相关资源
最近更新 更多