Я новичок в React, и я пытался создать простой секундомер с кнопками запуска и остановки. Я стучу головой о стену, чтобы попытаться очиститьInterval с помощью события onClick на кнопке Stop. Я бы объявил переменную для setInterval, а затем очистил ее с помощью clearInterval. К сожалению, он не работает. Какие-нибудь советы? Заранее спасибо.
import React, { Component } from 'react';
class App extends Component {
constructor(props){
super(props);
this.state = {time:0}
this.startHandler = this.startHandler.bind(this);
}
getSeconds(time){
return '0${time%60}'.slice(-2);
}
getMinutes(time){
return Math.floor(time/60);
}
startHandler() {
setInterval(()=>{
this.setState({time:this.state.time + 1});
},1000)
}
stopHandler() {
//HOW TO CLEAR INTERVAL HERE????
}
render () {
return (
<div>
<h1>{this.getMinutes(this.state.time)}:{this.getSeconds(this.state.time)}</h1>
<button onClick = {this.startHandler}>START</button>
<button onClick = {this.stopHandler}>STOP</button>
<button>RESET</button>
</div>
);
}
}
export default App;
вы можете добавить интервал в состояние вашего компонента и очистить его, когда захотите.
componentDidMount(){
let intervalId = setInterval(this.yourFunction, 1000)
this.setState({ intervalId: intervalId })
}
componentWillUnmount(){
clearInterval(this.state.intervalId)
}
Вы можете использовать clearInterval(id)
чтобы остановить его. Вы должны хранить идентификатор setInterval
например
const id = setInterval(() = > {
this.setState({
time: this.state.time + 1
});
}, 1000)
clearInterval(id);
В вашей функции startHandler вы можете:
this.myInterval = setInterval(()=>{
this.setState({ time: this.state.time + 1 });
}, 1000);
и в вашей stopInterval() вы сделаете clearInterval(this.myInterval);