Javascript React不绑定函数调用,尽管有相反的警告

Javascript React不绑定函数调用,尽管有相反的警告,javascript,reactjs,Javascript,Reactjs,我有一个React组件,需要在setTimeout()调用中运行检查。下面是我的方法调用 componentDidUpdate: function () { // Despite console warnings, React does *not* do this. var boundCheck = this.checkYourself.bind(this); if (!this.timeoutId) { this.timeoutId = window.s

我有一个React组件,需要在
setTimeout()调用中运行检查。下面是我的方法调用

componentDidUpdate: function () {
    // Despite console warnings, React does *not* do this.
    var boundCheck = this.checkYourself.bind(this);
    if (!this.timeoutId) {
        this.timeoutId = window.setTimeout(function () {
            boundCheck();
        }, UPDATE_CHECK_INTERVAL);
    }
},
这将在控制台上产生以下警告:

bind():将组件方法绑定到组件。React以高性能方式自动为您执行此操作,因此您可以安全地删除此呼叫

但是,如果我将方法更改为以下内容:

componentDidUpdate: function () {
    if (!this.timeoutId) {
        this.timeoutId = window.setTimeout(function () {
            this.checkYourself();
        }, UPDATE_CHECK_INTERVAL);
    }
},

我得到了一个异常,因为
引用了
窗口
。有没有一种方法可以让React高兴呢?

您需要在
setTimeout
中绑定函数:

componentDidUpdate: function () {
  if (!this.timeoutId) {
    this.timeoutId = window.setTimeout(function () {
      this.checkYourself();
    }.bind(this), UPDATE_CHECK_INTERVAL);
  }
},

this.checkYourself()
现在应该按预期调用组件。

您需要在
setTimeout
中绑定函数:

componentDidUpdate: function () {
  if (!this.timeoutId) {
    this.timeoutId = window.setTimeout(function () {
      this.checkYourself();
    }.bind(this), UPDATE_CHECK_INTERVAL);
  }
},

this.checkYourself()
现在应该按预期调用组件。

自0.4版以来,React自动绑定您在createClass中创建的所有方法并将其绑定到正确的上下文,您只需在createClass中声明一个方法并直接调用
setTimeout(this.method,1000)


自0.4版以来,React自动绑定您在createClass中创建的所有方法并将其绑定到正确的上下文,您只需在createClass中声明一个方法并直接调用
setTimeout(this.method,1000)


您也可以使用箭头功能来实现这一点:

this.timeoutId = setTimeout(() => {
    this.checkYourself();
}, UPDATE_CHECK_INTERVAL);

使用react
v0.14.6

进行测试,您也可以使用箭头功能来实现这一点:

this.timeoutId = setTimeout(() => {
    this.checkYourself();
}, UPDATE_CHECK_INTERVAL);

用react
v0.14.6

测试哦,太棒了。非常感谢。哦,太好了。非常感谢。谢谢,但是将
这个
保存到一个变量中并在
setTimeout()中使用它是一种与
绑定
相同的方法。如果React支持它,我宁愿尝试“正确的方式”,而且它看起来确实支持!谢谢,但是将
这个
保存到一个变量中并在
setTimeout()中使用它是一种与
绑定
相同的方法。如果React支持它,我宁愿尝试“正确的方式”,而且它看起来确实支持!