setTimeout在回调中重置状态

时间:2016-04-11 10:24:35

标签: reactjs

尝试在回调中使用setTimeout在几秒钟后重置状态,但得到错误未捕获的TypeError:this.setState不是函数

有人可以帮忙吗?

setMainState: function() {
    this.setState({
        clicked: !this.state.clicked
    }, this.delayState());
},

delayState: function() {
    setTimeout((function() {
        this.setState({
            clicked: false
        }), 2000}));
},

handleClick: function(event) {
    this.setMainState();
},

1 个答案:

答案 0 :(得分:1)

这是在setTimeout函数中更改的上下文,因此您需要使用变量来存储该对象self,然后它将在该函数中相同

setMainState: function() {
    this.setState({
        clicked: !this.state.clicked
    }, this.delayState());
},

delayState: function() {
 var self = this;
    setTimeout((function() {
        self.setState({
            clicked: false
        }), 2000}));
},

handleClick: function(event) {
    this.setMainState();
},