我setInterval()
在 React 组件中使用了一个计时器,但我不确定在使用state
. 我遇到了一些异步问题。
假设我的 React 组件中有一组链接可以很好地呈现和执行回调:
let links = [10, 50, 100, 500, 1000].map((num) => {
return(
<Link key={num} onClick={(e) => this.switchNums(num)} to={`/somePath/${num}`}>{num}</Link>
)
})
这是switchNums()
我希望它重置现有计时器的功能:
switchNums(num){
this.stopTimer()
this.reset(num)
}
这是startTimer()
,stopTimer()
和reset()
:
startTimer(){
if(!this.state.timerId){
let timerId = setInterval(()=>{
let timer = this.state.timer + 1
this.setState({
timer: timer,
timerId: timerId
})
}, 1000)
}
}
stopTimer(){
clearInterval(this.state.timerId)
this.setState({timerId:null})
}
reset(size){
this.setState({
gameOver: false,
counter: 0,
correct: 0,
numbers: this.getRandomNumbers(size),
timer: 0
}, this.startTimer())
}
其中一个漏洞是在点击链接会迅速导致多个间隔火,尽管if
病情startTimer()
。我猜这与setState()
. 另一个错误(我认为相关)是,当我缓慢点击时,它只会每隔一次开始间隔。
任何人都可以对此有所了解吗?或者他们做了什么来规避与setState
结合使用的异步问题setInterval
(任何设置状态可以返回Promise的方式?),或者哪种生命周期方法最适合这种情况?