useEffect
副作用的一些示例是:获取数据、直接更新 DOM 和计时器
useEffect
接受两个参数。 第二个参数是可选的
useEffect(<function>, <dependency>)
使用 setTimeout()
在初始渲染后计算 1 秒:
实时编辑器
结果
Loading...
警告
可是等等!! 它一直在计数,即使它应该只计数一次!
useEffect
在每个渲染器上运行。 这意味着当计数发生变化时,会发生渲染,然后触发另一个效果
这不是我们想要的。 有几种方法可以控制副作用何时运行
我们应该始终包含接受数组的第二个参数。 我们可以选择将依赖项传递给此数组中的 useEffect
所以,要解决这个问题,让我们只在初始渲染上运行这个效果
实时编辑器
结果
Loading...
下面是一个依赖于变量的 useEffect
Hook 示例
如果 count
变量更新,效果将再次运行:
实时编辑器
结果
Loading...
提示
如果有多个依赖项,它们应该包含在 useEffect
依赖项数组中
Effect 清理
某些效果需要清理以减少内存泄漏
超时、订阅、事件监听器和其他不再需要的效果应该被丢弃
我们通过在 useEffect
Hook 的末尾包含一个返回函数来做到这一点
实时编辑器
结果
Loading...
警告
要清除计时器,我们必须给它命名