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

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

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

解析:
useEffect 是 React 的一个 Hook,用于处理副作用(如数据获取、订阅、手动 DOM 操作等)。它的第二个参数是一个依赖数组(dependency array),React 会根据该数组中的值是否发生变化来决定是否重新执行副作用函数。

  • 如果依赖数组为 [](空数组),React 会认为该副作用不依赖任何外部变量,因此只在组件首次渲染完成后执行一次副作用函数。
  • 同时,如果 useEffect 的回调函数返回了一个函数(即清理函数),这个清理函数会在组件卸载前被调用,用于清理副作用(如清除定时器、取消订阅等)。

例如:

useEffect(() => {
  console.log('组件已挂载');
  return () => {
    console.log('组件即将卸载');
  };
}, []); // 仅在挂载和卸载时执行

注意:使用空依赖数组时需确保副作用函数中不引用任何可能变化的 props 或 state,否则会导致闭包问题(捕获的是初始值而非最新值)。如果确实需要最新值,应将其加入依赖数组或使用 useRef 等方式处理。

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

昵称:
邮箱:
内容: