【问题标题】:Type error: Cannot read property 'map' of undefined类型错误:无法读取未定义的属性“地图”
【发布时间】:2020-05-27 17:52:36
【问题描述】:
import React, { Component } from "react";
import axios from "axios";

class Abc extends Component {
  constructor(props) {
    super(props);
    this.state = { descriptions: [] };
  }
  componentDidMount() {
    axios
      .get("https://jsonplaceholder.typicode.com/users")
      .then(response => {
        this.setState({ descriptions: response.data });
        if (response.data) {
          var rdata = response.data;
          for (var r = 0; r < rdata.length; r++) {
            if (r === 0) {
              // console.log(rdata[r]);
              // const {rdata} this.dataEle = rdata[r]
              console.log(this.dataEle.name);
            }
          }
        }
      })
      .catch(error => {
        console.log(error);
      });
  }
  render() {
    const { dataEle } = this.setState;

    return (
      <div>
        {dataEle.map((description, index) => (
          <p key={index}>{description.description}</p>
        ))}
      </div>
    );
  }
}

export default Abc;

【问题讨论】:

标签: reactjs


【解决方案1】:

请尝试一下:

class Abc extends Component {
  constructor(props) {
    super(props);
    this.state = {
   descriptions: [] ;
  }
}
  componentDidMount() {
    axios
      .get("https://jsonplaceholder.typicode.com/users")
      .then(response => {
        this.setState({ descriptions: response.data });

      })
      .catch(error => {
        console.log(error);
      });
  }

//for mapping**

return (
      <div>
        {this.sate.descriptions.map((description, index) => (
          <p key={index}>{description.description}</p>
        ))}
      </div>
    );
  }
}

【讨论】:

    【解决方案2】:

    dataEle 在第一次渲染中未定义(以及在获取之前的任何后续渲染)。您也没有在渲染函数中正确解构它。我认为您可能打算改为解构 descriptions

    import React, { Component } from "react";
    import axios from "axios";
    
    class Abc extends Component {
      constructor(props) {
        super(props);
        this.state = { 
          descriptions: [],
         };
      }
      componentDidMount() {
        axios
          .get("https://jsonplaceholder.typicode.com/users")
          .then(response => {
            this.setState({ descriptions: response.data });
            // if (response.data) {
            //   var rdata = response.data;
            //   for (var r = 0; r < rdata.length; r++) {
            //     if (r === 0) {
            //       // console.log(rdata[r]);
            //       // const {rdata} this.dataEle = rdata[r]
            //       console.log(this.dataEle.name);
            //     }
            //   }
            // }
          })
          .catch(error => {
            console.log(error);
          });
      }
      render() {
        const { descriptions } = this.state;
    
        return (
          <div>
            // {descriptions.map((description, index) => (
            //   <p key={index}>{description.description}</p> // response data objects don't have a description property!
            // ))}
            {descriptions[1] && descriptions[1].name}
          </div>
        );
      }
    }
    
    export default Abc;
    

    此外,响应数据形状上没有 description 属性,但 TBH 我不确定你甚至试图用 for 循环做什么,它会引发错误。

    【讨论】:

    • 抱歉回复我只想在数组中显示第二个对象..你能帮忙吗,不是所有的对象
    • descriptions.length &gt; 1 &amp;&amp; descriptions[1]descriptions[1] ? descriptions[1].&lt;whatever property&gt; : null
    • 能否请您在我能理解的代码中进行编辑....请
    • 我想提交姓名..对不起...我犯了一个错误
    • @ManuPanduu 我在 13 小时前在那里发布了一个问题。
    【解决方案3】:

    您的代码中有很多问题。

    大概是你想要的:

    const { dataEle } = this.setState;
    

    成为

    const { descriptions = [] } = this.state;
    

    【讨论】:

    • 抱歉回复我只想在数组中显示第二个对象..你能帮忙吗,不是所有的对象
    • 返回 descriptions.length>1 ?

      {descriptions[1].description}

      : null
    猜你喜欢
    • 1970-01-01
    • 2018-02-17
    • 2023-01-03
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多