reactjs - 在 React 中使用 useState 和 useEffect 进行无限循环

标签 reactjs use-effect use-state

我想在每一秒之后增加状态 [秒] = [秒 + 1]。

const [second,setSecond] = useState(0);
useEffect(() => {
    const interval = setInterval(() => {
      setSecond(second+1)
    }, 1000);
    return () => clearInterval(interval);
}, []);

但是似乎出现了无限循环,[秒]只增加一次,从0到1,然后就停止运行了。

我更改了代码

setSecond(second+1)

setSecond((second) => {return second+1})

这个运行没有问题:

const [second,setSecond] = useState(0);
useEffect(() => {
    const interval = setInterval(() => {
      setSecond((second) => {return second+1})
    }, 1000);
    return () => clearInterval(interval);
}, []);

说实话,我还是没明白。有人可以向我解释为什么吗?提前致谢!

最佳答案

查看您的代码,我认为问题在于第二个值被绑定(bind)到 0。

const [second,setSecond] = useState(0);
useEffect(() => {
    const interval = setInterval(() => {
      setSecond(second+1)
    }, 1000);
    return () => clearInterval(interval);
}, []);

这里,当您的组件安装时,将执行 useEffect。此时,您正在创建一个函数并将其传递给 setInterval。该函数将使用创建时的秒值(等于 0)。因此,每次运行 setInterval 时,它都会执行 setSecond(0+1),它始终等于 1。

您提到的正确方法是有效的,因为您给它一个函数,每次执行时该函数都会将状态的当前值传递给它。

关于reactjs - 在 React 中使用 useState 和 useEffect 进行无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63408073/

相关文章:

reactjs - 为什么 useEffect Hook 的清理将 RTKQ 的结果视为 isLoading 以及如何避免该问题?

reactjs - 类型错误 : destroy is not a function in Reactjs while call api async function in useEffect hook

javascript - React 中太多的重新渲染

javascript - useState 不更新组件中传递的状态

reactjs - useState Hook 给出 "not a function"错误

variables - Reactjs - 访问变量

javascript - 动态创建回调

reactjs - GitLab CI Pipeline Job 给出错误 JavaScript heap out of memory

javascript - react.js 和 WebRTC RTCPeerConnection.addStream 不是对象

reactjs - 忽略某些 React useEffect 依赖项警告是否正确?