首页 > 解决方案 > 如何从区间回调中访问创建区间的对象?

问题描述

我是 JavaScript 新手,我当前的问题没有出现。我在这里有一个 React 应用程序,我尝试通过计时器功能来扩展它。我创建了一个计时器(类似于这个问题:setInterval in a React app)并且计时器功能本身正在工作。

但是计时器回调(或更确切地说是setInterval回调)不起作用。在setInterval变量this指向Windows但我认为它应该指向App,这是创建计时器并包含setInterval回调的类/对象。因此我得到以下错误。

在此处输入图像描述

以下是我所做的关键代码更改:

class App extends Component {

  //...

  componentDidMount() {

    //...

    var intervalId = setInterval(this.timer, 5000);
    // store intervalId in the state so it can be accessed later:
    this.setState({intervalId: intervalId});
  }

  componentWillUnmount() {
    
    //...

    // use intervalId from the state to clear the interval
    clearInterval(this.state.intervalId);
  }

  timer() {
    for (let i = 0; i < this.state.whitelist.length; i++) {
      this.requestDeviceStatus(this.state.whitelist[i]);
    }
  }

 //...

}

但是您可以在此处访问完整的源代码/提交: https : //github.com/wewa00/Reacticz/blob/backgroundtimer/src/App.js,(这是相关提交:02e3e93、6bcabba

为什么this指向Window以及如何App从内部访问timer()

标签: javascriptnode.jsreactjsnpm

解决方案


类型错误

使用带有 ES6 箭头方法的计时器功能。

timer=()=>{
   for (let i = 0; i < this.state.whitelist.length; i++) {
        this.requestDeviceStatus(this.state.whitelist[i]);
    }
}

推荐阅读