开发者问题收集

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;

这是使用 api。 在此处输入图片描述

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>

Demo

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