前端知库

useEffect 的依赖数组和清理函数应该怎么写?

把 Effect 看作与外部系统同步的过程。

参考答案

useEffect 用于在提交之后与网络、事件监听等外部系统同步。依赖应包含 Effect 使用的所有响应式值。依赖变化时,React 先运行旧清理,再执行新设置;卸载时也会清理。

JSX
useEffect(() => {
  const controller = new AbortController();
  fetch(url, { signal: controller.signal })
    .catch(error => {
      if (error.name !== "AbortError") console.error(error);
    });
  return () => controller.abort();
}, [url]);

开发环境的 Strict Mode 可能额外执行一次设置与清理,以暴露遗漏。不要用删除依赖的方式绕开检查。仅根据已有状态计算的值,通常可以在渲染中直接计算。