我正在按照文档https://facebook.github.io/react/docs/state-and-lifecycle.html了解react组件
为什么这里需要使用箭头函数:
this.timerID = setInterval(() => this.tick(), 1000);
为什么我不能说(显然它不起作用)
this.timerID = setInterval(this.tick(), 1000);
我正在按照文档https://facebook.github.io/react/docs/state-and-lifecycle.html了解react组件
为什么这里需要使用箭头函数:
this.timerID = setInterval(() => this.tick(), 1000);
为什么我不能说(显然它不起作用)
this.timerID = setInterval(this.tick(), 1000);
的第一个参数setInterval
是 类型function
。如果你这样写:
this.timerID = setInterval(this.tick(), 1000);
...然后你不传递一个函数,而是this.tick
立即执行该函数,然后将该函数调用返回的值作为参数传递。
你可以这样写:
this.timerID = setInterval(this.tick, 1000);
如果省略括号,则传递对this.tick
函数的引用,该函数将setInterval
在 1000 毫秒后执行。
setInterval
将函数作为第一个参数,在第二种情况下它得到一个返回值
将其更改为
this.timerID = setInterval(this.tick.bind(this), 1000);
或者
this.timerID = setInterval(() => this.tick(), 1000);
当您想将函数绑定到 React 上下文时,这可能是您所需要的。
请参阅有关为什么需要在 React 中绑定函数的答案
如果你不这样做,你可以简单地写
this.timerID = setInterval(this.tick, 1000);
为什么这里需要使用箭头函数
答案很简单:查看实时脚本示例中的结果...
class Persons{
scopeOne(){
// your will see the result this will display our current object 'Persons'
setInterval(function(){
console.info(' SCOPE ONEo : '+this);
},3000);
}
scopeTwo(){
setInterval(function(){
console.info(' SCOPE TWO : '+this);
}.bind(this) ,3000);
}
scopeThree(){
setInterval(() => { console.info(' SCOPE THREE : '+this) },3000);
}
}
let p = new Persons();
p.scopeOne();
p.scopeTwo();
p.scopeThree();
在第一个范围中,结果是WINDOW OBJECT,因此我们无法访问我们当前的类范围,因此在第二个范围中,我们将范围与 bind(this) 一起使用,这有助于绑定我们当前的对象范围,在第三个范围中,它与调用当前对象的第二个范围相同....
您需要提供一个函数引用,您正在尝试调用一个函数,除非该函数返回一个函数引用,否则您的代码将无法工作
它应该是这样的
this.tick = function() { .... }
this.timerID = setInterval(this.tick, 1000);
如果您没有使用箭头函数,那么您的代码应该如下所示:
this.timerID = setInterval(function(){ this.tick() }, 1000);