为什么 setInterval 在 nodejs 中获取变量的最新值,但在 React 的 useEffect 中却没有这样做?[复制]

Why does setInterval pickup the latest value of variable in nodejs, but fails to do so in React's useEffect? [duplicate]

提问人:Srinivas Talnikar 提问时间:10/17/2023 更新时间:10/17/2023 访问量:39

问:

NodeJS 代码

let a = 0;

function useEffect(callback) {
  const b = callback;
  b();
}

const cb = () => {
  setInterval(() => {
    console.log('a', a);
  }, 1000);
};

useEffect(cb);

setInterval(() => {
  a++;
}, 500);

React 的代码

import React, {useEffect, useState} from 'react';

export const  App = ()=> {
    const [a, setA] = useState(0);
    useEffect(() => {
      setInterval(() => {
        console.log('a', a);
      }, 1000);
    }, [])

    useEffect(() => {
      setInterval(() => {
        setA(a => a + 1)
      }, 500);
    }, [])

    return <></>
}


结果:: NodeJS:每隔一段时间记录一次更新的值 ReactJS:记录的值不会在即将到来的时间间隔内更新

React 的代码段不应该像 nodejs 一样执行,即捕获“a”的引用并显示最新值。我在这里错过了什么?

JavaScript ReactJS 节点 .js React-Native 闭包

评论

1赞 T.J. Crowder 10/17/2023
不同之处在于,在第一个示例中,只有一个变量。但是在你的 React 示例中,你有多个变量,每个变量对应一个对组件函数的调用(每次调用渲染组件)。但是您的计时器代码仅在第一个代码上关闭,而从未看到其他任何代码。aa
0赞 T.J. Crowder 10/17/2023
(这与 Node.js 与浏览器环境无关。究竟有多少个变量,它们的闭包是什么。a
0赞 HighDevWizards 10/17/2023
您可以使用 setTimeout 函数而不是 setInterval const [a, setA] = useState(0);useEffect(() => { setTimeout(() => { setA((a) => a+1); }, [1000]) console.log(a); }, [a])

答: 暂无答案