【发布时间】:2021-04-18 16:07:35
【问题描述】:
我有一个代码,其中state 应该每 2 秒增加 1。 setState 在setInterval 回调中被调用,但我没有使用setState 的典型形式:setState(newState) 我使用了回调形式setState(() => {...}),奇怪的事情开始发生。状态不是递增 1,而是递增 2。
这是有问题的代码的简化:
const handler = () => {
let val = 0;
setInterval(() => {
setState(() => {
console.log("before inc", { val });
val = val + 1;
console.log("after inc\n--------", { val });
return val;
});
}, 2000);
}
预期的日志是:
before inc {val: 0}
after inc {val: 1}
--------
before inc {val: 1}
after inc {val: 2}
--------
但是我得到了:
before inc{val: 0}
after inc {val: 1}
--------
before inc {val: 2}
after inc {val: 3}
--------
这太奇怪了。发生了什么?
游乐场:codesandbox
【问题讨论】:
-
您在
index.js中启用了<React.StrictMode>。 -
我真的不明白为什么它被关闭为重复...这不是那个问题的重复,它是相关的但不是重复的。
标签: javascript reactjs react-hooks