Reactjs 在子函数中使用过期变量的useEffect挂钩

Reactjs 在子函数中使用过期变量的useEffect挂钩,reactjs,use-effect,Reactjs,Use Effect,我试图使用useEffect挂钩作为在react中创建异步计时器的一种方法。该逻辑位于TimeFinder()内部,useEffect的工作方式是每隔1000毫秒调用一次函数。奇怪的是,出于某种原因,当调用timeFunc()时(每一秒),它只访问旧的变量值(特别是“暂停”)。例如,如果间隔以值“paused”为false开始,即使我将“paused”更改为true(paused是父组件传入的状态变量),timeFunc()仍将认为paused为false。我想不出来。感谢您的帮助 代码: ti

我试图使用useEffect挂钩作为在react中创建异步计时器的一种方法。该逻辑位于TimeFinder()内部,useEffect的工作方式是每隔1000毫秒调用一次函数。奇怪的是,出于某种原因,当调用timeFunc()时(每一秒),它只访问旧的变量值(特别是“暂停”)。例如,如果间隔以值“paused”为false开始,即使我将“paused”更改为true(paused是父组件传入的状态变量),timeFunc()仍将认为paused为false。我想不出来。感谢您的帮助

代码:


timeFunc
取决于具有最新值
paused
,但它不存在于
useffect
的依赖项数组中

将其添加到依赖项数组中,并在状态中存储到下一个间隔的时间,或者改为使用
暂停
的引用(使用稳定引用)(或除状态之外),例如:

还要注意

let interval = null;
  interval = setInterval(() => {
    timeFunc();
  }, 1000);
简化为

const interval = setInterval(timeFunc, 1000);
// to change it:
pausedRef.current = !pausedRef.current;
let interval = null;
  interval = setInterval(() => {
    timeFunc();
  }, 1000);
const interval = setInterval(timeFunc, 1000);