我正在用React构建一个简单的时钟应用程序.目前countDown()
功能正常,但我希望用户能够通过按下按钮来停止/启动时钟.我有一个名为paused
的状态布尔值,当用户点击一个按钮时,它会反转.问题在于,在paused
的值被反转后,传递给setInterval()
的countDown()
函数中对paused
的引用似乎正在访问默认值paused
,而不是更新后的值.
function Clock(){
const [sec, setSecs] = useState(sessionLength * 60);
const [paused, setPaused] = useState(false);
const playPause = () => {
setPaused(paused => !paused);
};
const countDown = () => {
if(!paused){
setSecs(sec => sec - 1)
}
}
useEffect(() => {
const interval = setInterval(() => {
countDown();
}, 1000);
return () => {
clearInterval(interval);
};
}, []);
我假设这与React中调用setState()
的异步性质有关,和/或使用正则表达式时作用域/上下文的性质有关.然而,我无法通过阅读与这些概念相关的文档来确定发生了什么.
我可以想出一些变通办法,让我的应用程序按预期运行.然而,我想了解我目前的方法有什么问题.我希望任何人都能对此有所了解!