在 React 中,为什么使用 useEffect 时依赖数组为空会导致 effect 只在组件挂载和卸载时执行一次?
在 React 中,为什么使用 useEffect 时依赖数组为空会导致 effect 只在组件挂载和卸载时执行一次?
回答与解析:
当 useEffect 的依赖数组(第二个参数)为空数组 [] 时,React 会认为该 effect 不依赖任何外部变量或 props/state 的变化。因此,React 仅在组件首次挂载(mount)时执行该 effect,并在组件卸载(unmount)时执行其返回的清理函数(如果有的话)。
原理:
useEffect 的工作机制是:每次组件重新渲染后,React 会对比依赖数组中的值是否发生变化。如果依赖数组为空,意味着“没有依赖项”,React 就不会在后续渲染中再次执行该 effect,因为“没有东西可以变化”。
示例:
useEffect(() => {
  console.log('组件已挂载');
  return () => {
    console.log('组件将卸载');
  };
}, []); // 空依赖数组
上述代码中,console.log('组件已挂载') 仅在组件首次渲染后执行一次;当组件被移除时,清理函数执行一次。
注意事项:
如果 effect 中实际使用了某些 state 或 props,但未将其加入依赖数组,会导致闭包陷阱(stale closure),即 effect 中引用的是初始值而非最新值。因此,应确保依赖数组完整反映 effect 中使用的响应式变量,或使用 ESLint 的 react-hooks/exhaustive-deps 规则来避免遗漏。

发表评论 (审核通过后显示评论):