在不使用 useEffect 钩子的情况下启动计时器间隔

时间:2021-07-20 18:12:34

标签: javascript reactjs react-native

我想在不使用 useEffect 钩子的情况下在 react native 中启动一个计时器间隔,在 y 的情况下,我想在承诺解析时启动一个计时器并每秒更改一个状态变量,我如何在不使用 useEffect 钩子的情况下做到这一点?< /p>

我试过这个:

useEffect(
  () => {
    const id = setInterval(() => {
        
     setCounter(counter+1)
    
    }, 1000);
    return () => {
      clearInterval(id);
    };
  },
  [] // empty dependency array
);

虽然它可以工作,但我需要启动定时器从普通函数而不是钩子调用它。

1 个答案:

答案 0 :(得分:3)

任何副作用(包括启动定时器)不应该属于组件函数的主体。相反,最好将这些事情委托给 useEffect() 钩子。

如果我正确理解您的问题,您仍然可以在钩子中启动该计时器,只需调用内部的普通函数即可。

例如如果你的普通函数已经返回一个函数来清理自己,那就这么简单:

useEffect(() => startTimer(setCounterCallback), [])

哦,如果计划是在 promise 解决后启动它,将该异步函数包装在同一个 useEffect() 中:

useEffect(() => {
  const promise = Promise.resolve();
  promise.then(() => startTimer(setCounterCallback));
}, []);