无法读取属性' setState'在Render()上未定义

时间:2017-11-02 00:01:18

标签: javascript reactjs setstate

我尝试在render()上设置一个新的值状态:



        this.state.contributionsList.map(function(item, i) {
            this.setState({
                listUsers: item.login
            })
        });




也是这样:



let usersByRepo = this.state.contributionsList.map(function(item, i) {
    this.setState({
        listUsers: item.login
    })
});




如果我跑console.log(item),我就拥有了所有需要的东西。但是,如果我将此信息添加到我的州,我会得到TypeError: Cannot read property 'setState' of undefined的反馈。为什么呢?

我有意这样做,因为我会将此结果作为prop发送到我的组件。但我仍然遇到这个问题。

  • 1)为什么会这样?
  • 2)解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

你应该从不在渲染函数中调用setState,它会导致无限循环。重新思考你的逻辑并将代码放在其他地方,它会起作用。

答案 1 :(得分:0)

任何新的function() redefines what this is。如果您可以使用ES6胖箭头功能,请执行以下操作:

this.state.contributionsList.map((item, i) => {
    this.setState({
        listUsers: item.login
    })
});

如果没有,请:

var that = this;
this.state.contributionsList.map((item, i) => {
    that.setState({
        listUsers: item.login
    })
});

也就是说,在render()中设置状态绝对不是你想要做的事情。它将导致无限循环,因为setState()导致调用render()。我不确定你要做什么,但应该有不同的方法来做。