【发布时间】:2022-01-04 04:52:36
【问题描述】:
我在 useEffect 内使用 setInterval,在我的一个反应组件内使用空依赖数组。
有真/假useState 控制该组件的显示。
当状态为假时,组件被隐藏,当状态为真时,组件被显示。
类似这样的:
const [state, setState] = useState(false)
// in jsx render section
return (
<div>
{state? <component/> : '' }
</div>
)
当组件第一次加载时,setInterval 只运行一次,这是它应该做的。
如果状态变为 false 然后又变为 true,则该组件将从 UI 中移除,然后再次显示回来。但是,这里发生的情况是,现在我在后台运行了两个 setInterval 函数,而第一个函数没有关闭。
setInterval 函数的数量随着组件的每次重新渲染而不断增加。
我不明白 React 在这种情况下是如何工作的。
我需要知道它是如何工作的(即为什么函数不会关闭,为什么函数的数量会增加)以及如何修复它。
【问题讨论】:
-
间隔不断运行,直到您通过
clearInterval明确停止它们。不是 React 的东西,这就是它们在 JS 中的工作方式。你说你只希望它运行一次,也许你想使用setTimeout。没有任何间隔的代码很难分辨 -
您需要共享您的组件代码。听起来您缺少
useEffectcleanup 功能,该功能可用于在组件卸载时清除间隔。 -
是的,清理功能丢失了,当我添加它时一切正常。感谢您的评论,很抱歉没有编写整个代码,我只是认为这足以解释我的问题。
标签: javascript reactjs react-hooks setinterval use-state