mcpField
R
react-useeffect

react-useeffect

github.com/op0ai开发1777 次安装42 周前更新
代码仓库

关于 react-useeffect

为 React 开发者提供的 Hook 使用指南,说明何时应避免 useEffect,以及何时需用它同步外部系统。通过常见场景和替代方案帮助选择合适做法。

主要功能

  1. 01区分需要与不需要 Effect 的场景
  2. 02提供常见反模式及替代方案
  3. 03指导派生状态在渲染期间计算
  4. 04介绍 useMemo、key 和事件处理器

适用场景

  1. 01避免用 Effect 处理派生数据
  2. 02处理用户操作引发的状态变化
  3. 03为数据获取添加清理逻辑

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/op0ai/claude-skills --skill react-useeffect

安装后在 Claude Code 中输入/react-useeffect确认已加载。

附带文件alternatives.mdanti-patterns.md

详细介绍

你可能不需要 Effect

Effect 是 React 的逃生舱口。它们可以让你与外部系统同步。如果不涉及外部系统,你就不需要 Effect。

快速参考

情况不要这样做应该这样做
根据 props/state 派生状态useState + useEffect在渲染期间计算
耗时计算用 useEffect 缓存useMemo
在 prop 变化时重置状态使用 setState 的 useEffectkey prop
响应用户事件使用 useEffect 监听状态直接使用事件处理函数
通知父组件发生更改使用 useEffect 调用 onChange在事件处理函数中调用
获取数据不带清理逻辑的 useEffect带清理逻辑的 useEffect 或框架

何时确实需要 Effect

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

何时不需要 Effect

  1. 转换渲染所需的数据 - 在顶层计算,它会自动重新运行
  2. 处理用户事件 - 使用事件处理函数,你清楚具体发生了什么
  3. 派生状态 - 直接计算:const fullName = firstName + ' ' + lastName
  4. 串联状态更新 - 在事件处理函数中计算所有下一个状态

决策树

Need to respond to something?
├── User interaction (click, submit, drag)?
│   └── Use EVENT HANDLER
├── Component appeared on screen?
│   └── Use EFFECT (external sync, analytics)
├── Props/state changed and need derived value?
│   └── CALCULATE DURING RENDER
│       └── Expensive? Use useMemo
└── Need to reset state when prop changes?
    └── Use KEY PROP on component

详细指南

评论

支持 Markdown