【发布时间】:2019-11-13 19:35:39
【问题描述】:
为什么这不能作为正常的一秒计数器工作?
function UseEffectBugCounter() {
const [count, setCount] = React.useState(0);
React.useEffect(() => {
const intervalId = setInterval(() => {
setCount(count + 1);
console.log(count);
}, 1000);
return () => clearInterval(intervalId);
}, []);
return <div>The count is: {count}</div>;
}
示例:https://codesandbox.io/s/sparkling-rgb-6ebcp
-是因为陈旧的闭包吗?
或
-是不是因为计数是一个状态变量,并且组件会在状态更新后重新渲染,所以会创建一个新的间隔来创建某种循环?
或
-还有别的吗?
如果可能的话,我正在寻找为什么会在这个答案中出现这种情况,有几篇不同的文章说明了它为什么不起作用(如上所述)。但到目前为止,还没有一个能够提供好的论据。
【问题讨论】:
标签: reactjs react-hooks