用途:这是一个关于 React useEffect 的编写、审查与调试指南。核心观点是 useEffect 属于“逃生舱”,用于让组件与 React 之外的外部系统保持同步;若没有外部系统参与,通常不需要 Effect。资料引用 React 文档:因组件显示而运行的代码应放在 Effect 中,其余应放在事件处理中。
主要能力:提供决策树,帮助区分事件处理、渲染期计算(或 useMemo)、用 key 重置状态、在事件中通知父组件,以及真正需要 useEffect 的场景。列出 6 类有效用例:连接外部系统、订阅浏览器事件、无框架时的数据获取、集成非 React 库(如 D3、地图、视频)、分析埋点、处理服务端与客户端渲染差异。
用法要点:Effect 中订阅、连接或设置定时器时必须返回清理函数,如 setInterval 对应 clearInterval、addEventListener 对应 removeEventListener、WebSocket 连接对应断开、fetch 对应 AbortController.abort() 或 ignore 标志。数据获取推荐 AbortController 以真正取消请求;使用 Next.js、Remix 等框架时应改用其数据获取机制。浏览器事件订阅可考虑 useSyncExternalStore。
反模式:包括用 Effect 派生状态、把事件逻辑放进 Effect、Effect 链式触发、通过 Effect 通知父组件、用 Effect 重置状态、在 props/state 变化时用 Effect 调整状态、在 Effect 中做应用初始化。资料给出替代做法,如渲染期直接计算、在事件处理中完成逻辑、用 key 强制重置、模块级初始化等。
依赖陷阱:对象作为依赖会因每次渲染生成新对象而反复触发,应只依赖原始值;使用函数式更新可避免把 count 放入依赖。
限制:资料未提供该技能的安装方式、平台支持、收费或价格信息,暂未提供。