SuperAPI AI 工具集

no-useeffect

编程与开发

查看项目

更新于 10-15 19:52

技能介绍

用途:这是一条 React 编码规范,严格禁止在组件中直接调用 useEffect,并为常见场景给出替代写法,目标是减少依赖数组带来的隐性耦合、无限循环与竞态问题。

主要能力与替代规则:

  1. 派生状态而非同步:需要从 state/props 计算值时直接内联计算,如 const filtered = products.filter((p) => p.inStock),不要用 useEffect + setState;也不要用多个 effect 串成税收、总价这类计算链。

  2. 数据请求用库:涉及 fetch + setState 或用例需要缓存、取消、重试时,改用 TanStack Query、SWR、Apollo、RTK Query、tRPC、Relay 或框架 loader(Next.js/Remix/Expo Router)。

  3. 用户操作用事件处理器:不要用 state 当标志位再由 effect 执行动作,直接在 onClick 等处理器中调用,如 <button onClick={() => postLike()}>Like</button>。

  4. 唯一允许的 effect 包装器是 useMountEffect,仅用于一次性的外部系统同步(DOM 焦点/滚动、第三方组件初始化、浏览器 API 订阅)。其实现为:

export function useMountEffect(effect: () => void | (() => void)) { // eslint-disable-next-line react-hooks/exhaustive-deps useEffect(effect, []); }

不应在 effect 内部加条件守卫,而应由父组件负责编排;条件满足时才挂载子组件,子组件内直接 useMountEffect。

  1. 用 key 重置而非依赖编排:当 ID/实体变化需要重新开始时,用 <VideoPlayer key={videoId} videoId={videoId} /> 借助 React 的重挂载语义,避免 useEffect(() => loadVideo(videoId), [videoId])。

使用方式:按决策树选择——计算值用规则 1,请求数据用规则 2,响应用户操作 Use 规则 3,一次性挂载设置用 useMountEffect,ID 变化重置用 key。以上都不适用时应重新审视,几乎不需要 useEffect。

适用场景与限制:适用于 React 项目代码审查与规范约束;useMountEffect 仅限一次性外部同步,不等同于通用 effect 方案。该资料未提供安装方式、版本要求或工具链配置,相关事实暂未提供。