react-useeffect

react-useeffect

热门

来自官方文档的 React useEffect 最佳实践。在编写/审查 useEffect、用于派生值的 useState、数据获取或状态同步时使用。教导何时不应使用 Effect 以及更好的替代方案。

2221Star
213Fork
更新于 2026/3/5
SKILL.md
readonly只读
name
react-useeffect
description

来自官方文档的 React useEffect 最佳实践。在编写/审查 useEffect、用于派生值的 useState、数据获取或状态同步时使用。教导何时不应使用 Effect 以及更好的替代方案。

你可能不需要 Effect

Effect 是 React 的逃生舱。它们让你与外部系统同步。如果没有涉及外部系统,你就不应该使用 Effect。

快速参考

情况 不要
从 props/state 派生状态 useState + useEffect 在渲染期间计算
昂贵的计算 useEffect 来缓存 useMemo
在 prop 变化时重置状态 使用 useEffect 调用 setState key prop
用户事件响应 useEffect 监听状态 直接使用事件处理函数
通知父组件变化 useEffect 调用 onChange 在事件处理函数中调用
获取数据 不带清理的 useEffect 带清理的 useEffect 或框架

何时确实需要 Effect

  • 外部系统同步(非 React 小部件、浏览器 API)
  • 订阅外部存储(尽可能使用 useSyncExternalStore
  • 因为组件显示而运行的分析/日志
  • 带有适当清理的数据获取(或使用框架内置机制)

何时不需要 Effect

  1. 转换数据以进行渲染 - 在顶层计算,自动重新运行
  2. 处理用户事件 - 使用事件处理函数,你确切知道发生了什么
  3. 派生状态 - 直接计算:const fullName = firstName + ' ' + lastName
  4. 链式状态更新 - 在事件处理函数中计算所有下一个状态

决策树

需要对某事做出响应吗?
├── 用户交互(点击、提交、拖拽)?
│   └── 使用事件处理函数
├── 组件出现在屏幕上?
│   └── 使用 Effect(外部同步、分析)
├── Props/state 变化且需要派生值?
│   └── 在渲染期间计算
│       └── 昂贵?使用 useMemo
└── 当 prop 变化时需要重置状态?
    └── 在组件上使用 key prop

详细指导