Uncaught TypeError: Cannot read property 'length' of undefined

来源:14-5 PC端首页模块布局开发(中)

慕的地3571103

2017-11-20

老师您好!我的代码是这样的: 

constructor() {

        super();

        this.state = {

            projectNumber: ''

        };

    }

    componentWillMount() {

        var myFetchOptions = {

            method: 'GET'

        };

        fetch("。。。。。",myFetchOptions)

        .then(response => response.json())

        .then(json => this.setState({projectNumber: json}));

    };

    render(){

        console.log(this.state);

        console.log(this.state.projectNumber.dataList.length)


然后我从后台获取到的json格式格式是这样的;

{

    "errcode": 0,

    "dataList": [

        {

            "id": 1,

            "pro_num": "0-不涉及"

        },

        {

            "id": 2,

            "pro_num": "1008"

        },

        {

            "id": 3,

            "pro_num": "1019"

        },

        {

            "id": 4,

            "pro_num": "1079"

        },

        {

            "id": 5,

            "pro_num":

但是想要获取dataList的length会报错???

写回答

3回答

鸿鹄yyn

2018-03-12

  constructor(){
    super();
    this.state={
      new:'',
    };
  }
  componentWillMount(){
    console.log("1111");
    var opts = {
        method:"GET"
    }
    fetch("http://newsapi.gugujiankong.com/Handler.ashx?action=getnews&type=top&count=10",opts)
    .then((response) => response.json()) //把response转为json
    .then((responseData) => { // 上面的转好的json
        this.setState({new:responseData})
        //alert(responseData);
        console.log(responseData);
      })
      .catch((error)=> {
          message.success('错误了');
        })
        console.log("1111");
  }
  render(){

    /*  
      '没有加载到任何新闻';*/
  var count =this.state.new.length;
//  var count=news.length;
  console.log(count);
  const newsList =count
    ? this.state.new.map((newsItem, index) => (
      <li key={index}>
        <Link to={`details/${newsItem.uniquekey}`} target="_blank">
          {newsItem.title}
        </Link>
      </li>
    ))
    : '没有加载到任何新闻';

    return(
      <div class="topNewsList">
      <Card>
        <ul>
          {newsList}
        </ul>
      </Card>
      </div>
    )
  }

这是我的解决办法 。你参考一下。。。。。。。。。。

0
0

Parry

2017-11-21

被你搞蒙了,那个属性没有length属性啊,要取长度需要自己计算的。

0
0

Parry

2017-11-21

错误是?是不是前面的对象是空?

0
2
鸿鹄yyn
回复
慕的地3571103
我也是请问解决了吗
2018-03-12
共2条回复

结合基础与实战学习React.js 独立开发新闻头条平台

轻松入门 React 开发,React Router 4 与 Webpack 2 完美升级项目

2768 学习 · 2126 问题

查看课程