React / Redux应用程序在settimeout内调度动作

时间:2017-03-28 17:33:03

标签: javascript reactjs redux

我正在尝试在settimeout中调度一个动作,但是收到错误。我在容器中有这个代码

代码

setTimeout(function(){ this.props.getData(); }, 3000);

错误

Uncaught TypeError: Cannot read property 'getData' of undefined

但是this.props.getData();在settimeout之外正常工作

3 个答案:

答案 0 :(得分:3)

在回调函数中使用时,

this不会引用您的组件类。如果setTimeout调用的唯一内容是this.props.getData,那么您不需要新功能来执行此操作:

setTimeout(this.props.getData, 3000);

如果你需要在回调函数中做额外的工作,那么你可以使用lambda函数,因为this将与外部作用域相同:

setTimeout(() => {
    // do something else
    this.props.getData();
}, 3000);

答案 1 :(得分:2)

您必须将this绑定到setTimeout的回调。

像这样:setTimeout(function(){ this.props.getData(); }.bind(this), 3000);

OR

setTimeout(()=>{this.props.getData();},3000)

答案 2 :(得分:2)

this中的setTimeout()不是您期望的this。尝试将函数绑定到当前上下文,看看是否有效。

setTimeout(function(){
   this.props.getData();
}.bind(this), 3000);

或者您可以像这样使用箭头功能:

setTimeout(() => this.props.getData(), 3000);

箭头功能无环境。它们继承了父上下文。

参考文献:

Arrow functions

Understanding JS this