[英]clearInterval not working in React Timer App
I've been working on improving my React skills by creating a pomodoro timer app.我一直致力于通过创建一个番茄钟计时器应用程序来提高我的 React 技能。 For some reason I can't seem to get
clearInterval
working:出于某种原因,我似乎无法让
clearInterval
工作:
startTimer() {
const { started } = this.state;
var timer;
if (!started) {
timer = setInterval(this.countdown, 1000);
this.setState({ started: true });
}
else {
clearInterval(timer);
this.setState({ started: false });
}
}
No console errors.没有控制台错误。 Can confirm that it's definitely running that part of the conditional statement (when I log
this.state.started
it shows false
).可以确认它肯定正在运行条件语句的那部分(当我记录
this.state.started
它显示false
)。 The timer just keeps ticking and doesn't actually stop.计时器只是不停地滴答作响,实际上并没有停止。
Rest of the code:其余代码:
import React, { Component } from 'react';
class Timer extends Component {
constructor(props) {
super(props);
this.state = {
secs: 60,
started: false
};
this.startTimer = this.startTimer.bind(this);
this.countdown = this.countdown.bind(this);
}
countdown() {
this.setState({ secs: this.state.secs - 1});
}
startTimer() {
const { started } = this.state;
var timer;
if (!started) {
timer = setInterval(this.countdown, 1000);
this.setState({ started: true });
}
else {
clearInterval(timer);
this.setState({ started: false });
}
}
render() {
const { secs } = this.state;
console.log('secs:', secs)
console.log('started:', this.state.started);
return (
<div className='timer' onClick={this.startTimer}>
<h2>Session</h2>
<h1>{this.props.session}:{secs == 60 ? '00': secs}</h1>
</div>
);
}
}
export default Timer;
Initialize this.timer
in the constructor.在构造函数中初始化
this.timer
。 Then create the setInterval
and assign it to this.timer
, which will allow you to clear it later.然后创建
setInterval
并将其分配给this.timer
,这将允许您稍后清除它。
import React, { Component } from 'react';
class Timer extends Component {
constructor(props) {
super(props);
this.state = {
secs: 60,
started: false
};
this.timer = null;
this.startTimer = this.startTimer.bind(this);
this.countdown = this.countdown.bind(this);
}
countdown() {
this.setState({ secs: this.state.secs - 1});
}
startTimer() {
const { started } = this.state;
if (!started) {
this.timer = setInterval(this.countdown, 1000);
this.setState({ started: true });
}
else {
clearInterval(this.timer);
this.setState({ started: false });
}
}
render() {
const { secs } = this.state;
console.log('secs:', secs)
console.log('started:', this.state.started);
return (
<div className='timer' onClick={this.startTimer}>
<h2>Session</h2>
<h1>{this.props.session}:{secs == 60 ? '00': secs}</h1>
</div>
);
}
}
export default Timer;
if you aren't trying to create a class如果你不想创建一个类
if(condition_is_true){
const checkUntilConditionIsFalse = setInterval(() => {
if (condition_is_false) {
clearInterval(checkUntilConditionIsFalse);
}
}, 1000);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.