Javascript setInterval一直在执行错误的if语句
我正在使用React钩子来构建倒计时计时器,我想使用setInterval()来减少时间,但一开始它执行正确的if语句(最后一个),但随后它继续执行,即使是错误的。我试着在控制台上记录“秒”和“分钟”,浏览器一直在显示25和0(我最初设置它们),甚至很难当我按下开始按钮时,我可以看到分钟显示另一个数字 完整代码: 我所说的准则是相关的:Javascript setInterval一直在执行错误的if语句,javascript,reactjs,Javascript,Reactjs,我正在使用React钩子来构建倒计时计时器,我想使用setInterval()来减少时间,但一开始它执行正确的if语句(最后一个),但随后它继续执行,即使是错误的。我试着在控制台上记录“秒”和“分钟”,浏览器一直在显示25和0(我最初设置它们),甚至很难当我按下开始按钮时,我可以看到分钟显示另一个数字 完整代码: 我所说的准则是相关的: const[timeleft,setTimeLeft]=useState({ 会议记录:25, 秒:0, }); 常数{ 会议记录, 秒 }=时间限制; 函数h
const[timeleft,setTimeLeft]=useState({
会议记录:25,
秒:0,
});
常数{
会议记录,
秒
}=时间限制;
函数handleStart(){
设置开始按钮(!开始按钮);
设置间隔(()=>{
如果(秒>0){
setTimeLeft((prevValue)=>{
返回{
…价值,
秒数:prevValue.seconds-1,
};
});
}否则如果(秒===0){
如果(分钟===0){
clearInterval();
}否则{
setTimeLeft((prevValue)=>{
返回{
分钟数:prevValue.minutes-1,
秒:59,
};
});
}
}
}, 1000);
}
不,setInterval
实际上正在做正确的事情,但您的代码可能没有做您希望它做的事情
在间隔时间内,您正在调用setTimeLeft
setTimeLeft
会导致组件重新渲染,并且每次都会重置setInterval
如果你想做你想做的事情,你很可能必须把这个状态拉到它自己的钩子中,或者用不同的方式来设计它。你使用setInterval是错误的,因为它应该是这样的:
let myInterval = setInterval(() => {/* bla-bla-bla */}, 1000)
// ...
clearInterval(myInterval)
但在你的代码中我看到了:
setInterval(() => {/* bla-bla-bla */}, 1000)
// ...
clearInterval()
因此,请清除什么间隔?react中的setInterval的问题是,它通常会使组件再次渲染,而新渲染将调用新的setInterval 这里有一篇有趣的文章提供了一个解决方案:
设置间隔不准确。。。。供参考