function App() {
const [tick, setTick] = useState(0);
useEffect(() => {
setInterval(() => {
setTick(tick + 1);
}, 1000);
}, [tick]);
return (
<div className="App">
<h1>{tick}</h1>
</div>
);
}
结果每秒增加超过 1,一开始还有效,后来就开始困惑了。查看演示 https://codesandbox.io/s/eloquent-kepler-vvzr7
最佳答案
因为每次更新tick
时,效果都会触发并启动另一个计时器...该效果不应依赖于tick
:
useEffect(() => {
let id = setInterval(() => {
setTick(tick => tick + 1); // No dependency anymore
}, 1000);
// This has nothing todo with your problem, but I encourage you to correctly clean up effects:
return () => clearInterval(id);
}, []); // <<
关于javascript - 在react中使用setInterval的增量值被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59281520/