React 中 useEffect 的依赖数组为空([])时,其回调函数会在什么时机执行?

React 中 useEffect 的依赖数组为空([])时,其回调函数会在什么时机执行?

答:当 useEffect 的依赖数组为空([])时,其回调函数仅在组件首次挂载(mount)完成后执行一次,并在组件卸载(unmount)前执行其返回的清理函数(如果有的话)。

解析:
useEffect 是 React 函数组件中用于处理副作用(如数据获取、订阅、手动 DOM 操作等)的 Hook。它的执行时机和依赖数组密切相关:

  • 如果不传依赖数组(即 useEffect(fn)),每次渲染后都会执行;
  • 如果传入依赖数组(如 [a, b]),只有当数组中的任意依赖项发生变化时才会重新执行;
  • 如果传入空数组([]),React 会认为该 effect 不依赖任何 props 或 state,因此只在组件首次挂载后执行一次,类似于 class 组件中的 componentDidMount,而在组件卸载时会调用返回的清理函数(类似 componentWillUnmount)。

注意:使用空依赖数组时要确保回调函数中不会引用可能变化的 props 或 state,否则会出现闭包陷阱(即引用的是初始值而非最新值)。如果确实需要访问最新值,应通过 ref 或调整依赖项来解决。

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

昵称:
邮箱:
内容: