[英]React useState entering infinite loop
I am using setInterval to increment the count and show it on a div like below.我正在使用 setInterval 来增加计数并将其显示在如下所示的 div 上。 I am sure that the incrementcount is working nice.
我确信 incrementcount 工作正常。 Dont know what mistake I am doing.
不知道我在做什么错误。
function DivClicker() {
const [count, setCount] = React.useState<number>(0);
function incrementCount():void{
setCount((prev)=>prev+1);
}
setInterval(incrementCount,1000);
return (
<div>
<div className='middle-div'>
<div>{count}</div>
</div>
</div>
)
}
export default DivClicker;
It is going crazy and incrementing hugely in matter of seconds.. Kindly guide.它正在变得疯狂,并在几秒钟内大幅增加。请指导。 Mostly it is going in an infinite loop.
大多数情况下,它会进入无限循环。 I dont know why.
我不知道为什么。
You're not only setting state each render - causing an infinite loop, but you're adding a new interval that sets state each render.您不仅为每个渲染设置 state - 导致无限循环,而且您添加了一个新的间隔,为每个渲染设置 state。 So each time you're adding more and more infinite setStates.
所以每次你添加越来越多的无限 setStates。
Fix this by setting your interval only once in a useEffect
:通过在
useEffect
中仅设置一次间隔来解决此问题:
function DivClicker() {
const [count, setCount] = React.useState<number>(0);
function incrementCount():void{
setCount((prev)=>prev+1);
}
useEffect(() => {
const interval = setInterval(incrementCount,1000);
return () => clearInterval(interval);
}, []);
return (
<div>
<div className='middle-div'>
<div>{count}</div>
</div>
</div>
)
}
export default DivClicker;
If you get an es-lint warning about a missing dependency, you can move incrementCount
into the useEffect
.如果您收到有关缺少依赖项的 es-lint 警告,您可以将
incrementCount
移动到useEffect
中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.