用途:该技能依据 React 官方文档总结 useEffect 的使用规范,帮助在编写或审查 Effect、用 useState 处理派生值、数据获取及状态同步等场景中判断何时该用、何时不该用 Effect。
核心观点:Effect 是 React 的逃生通道,用于与外部系统同步;若不涉及外部系统,通常不需要 Effect。
速查对照:由 props/state 派生状态,不要用 useState+useEffect,应在渲染时计算;昂贵计算不要用 Effect 缓存,应使用 useMemo;prop 变化时重置状态不要用 Effect+setState,应使用 key 属性;用户事件响应不要用 Effect 监听 state,应直接在事件处理器中处理;通知父组件变化不要用 Effect 调用 onChange,应在事件处理器中调用;数据获取不要用无清理的 useEffect,应使用带清理的 useEffect 或框架内置机制。
需要 Effect 的场景:与外部系统(非 React 组件、浏览器 API)同步;订阅外部存储(尽量用 useSyncExternalStore);因组件显示而运行的埋点/日志;带正确清理的数据获取(或用框架内置机制)。
不需要 Effect 的场景:为渲染转换数据,在顶层计算即可自动重跑;处理用户事件,用事件处理器;派生状态,直接计算如 const fullName = firstName + ' ' + lastName;链式状态更新,在事件处理器里一次算出所有下一状态。
决策树:需要响应某事时——用户交互用事件处理器;组件出现在屏幕上用 Effect(外部同步、埋点);props/state 变化需派生值则在渲染中计算,昂贵时用 useMemo;prop 变化需重置状态用组件上的 key 属性。
详细内容包括反模式与修复、更优替代方案(useMemo、key 属性、状态提升、useSyncExternalStore)。具体安装命令与调用方式资料未提供。