为什么这个间隔会停止响应?

时间:2017-07-11 11:37:48

标签: javascript reactjs timer

我正在玩这个示例计时器然后想看看我是否可以捕获/传递数据到计时器,所以我开始使用一个简单的消息。如果我将消息删除到计时器,则会相应地进行滴答。我开始记录其他生命周期方法,但我很好奇,如果这是JS的东西,我不认为它与反应生命周期中的东西相比。我分叉了一个JS bin here with ex

'code'

var Timer = React.createClass({
getInitialState: function() {
 return {secondsElapsed: 0};
},
tick: function(msg) {
 console.log('msg is',msg);
 this.setState({secondsElapsed: this.state.secondsElapsed + 1});
},
componentDidMount: function() {
 this.interval = setInterval(this.tick('hi'), 1000);
},
componentWillUnmount: function() {
 clearInterval(this.interval);
},
render: function() {
 return (
   <div>Seconds Elapsed: {this.state.secondsElapsed}</div>
 );
}
});

React.render(<Timer />, document.getElementById("content"));

2 个答案:

答案 0 :(得分:3)

您需要做的就是在代码中更改此位:

this.interval = setInterval(() => this.tick('hi'), 1000);

或者,您也可以将this发送给回调:

this.interval = setInterval(function(t) {t.tick('hi')}, 1000, this);

请参阅更新的小提琴,Spring Security docs

here需要(至少)两个参数,第一个是回调,需要是一个函数。你直接提供了代码;该代码必须在函数内部。

var intervalID = scope.setInterval(func, delay);
     

<强> FUNC

     

每延迟毫秒执行一次的函数。该函数未传递任何参数,并且不需要返回值。

答案 1 :(得分:0)

将代码更改为:

componentDidMount: function() {
   this.interval = setInterval(()=>this.tick('hi'), 1000);
}
相关问题