javascript - 如何从区间回调中访问创建区间的对象?
问题描述
我是 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()
?
解决方案
类型错误
使用带有 ES6 箭头方法的计时器功能。
timer=()=>{
for (let i = 0; i < this.state.whitelist.length; i++) {
this.requestDeviceStatus(this.state.whitelist[i]);
}
}
推荐阅读
- selenium - Selenium C# Extent 报告未在指定文件夹中生成 HTML 文件
- acumatica - 从销售订单摘要报告中排除订单
- powershell - Powershell 数组问题
- spring - Spring 框架:mvc:resources 不起作用
- c# - C# - 确定方法 ReturnType 是否属于特定类型
- javascript - 在 smarty 中使用 {literal} 的最佳实践是什么
- git - 使用 maven-release-plugin 时的管道循环
- exception-handling - 如何生成 SPARC 硬件陷阱(陷阱类型 tt < 128)
- c# - Nethereum C# 如何获得地址余额?
- sql - SQL Server 中关键字“WITH”附近的语法不正确