繁体   English   中英

useEffect - 在 setInterval 中调用函数

[英]useEffect - calling a function inside setInterval

如何在 useEffect 的 setInterval 中调用函数

useEffect(() => {
        const timeoutId = setInterval(() => {getTime}, 1000); // this is Line 8
        return function cleanup() {
          clearTimeout(timeoutId);
        }
      }, [getTime]);

const getTime=() =>{
            console.log("Inside getTime");}

我希望每 1 秒调用一次我的 getTime 函数。 我得到以下错误

 Line 8:46:  Expected an assignment or function call and instead saw an expression  no-unused-expressions.

另一个问题,我想每 1 秒更新一次状态,我可以在 setInterval 内更新状态吗

如果getTime()是 setInterval 的唯一函数,您可以这样做

        const timeoutId = setInterval(getTime, 1000);

或者,如果除了getTime()之外还有其他命令要在 setInterval 函数中执行,则如下所示。

        const timeoutId = setInterval(() => {getTime()}, 1000);

您的

() => {getTime}

引用getTime函数但不对其执行任何操作。 你不是在调用函数。 这就是 linter 警告你的。

为什么不将getTime函数单独传递给setInterval ,而没有不必要的匿名包装器?

const timeoutId = setInterval(getTime, 1000);

另请注意,由于您设置的是interval ,而不是超时,因此您应该使用clearInterval ,而不是clearTimeout

我可以在 setInterval 内更新状态吗

当然,但请记住,如果您有其他想要在流程中引用的状态变量,它们在区间的闭包中可能不是最新的。 如果这是一个问题,也可以使用 refs,或者在状态变量更改时清除并重新启动超时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM