mcpField
R
redux-saga

redux-saga

github.com/anivar开发238 次安装12 周前更新
代码仓库

关于 redux-saga

面向使用 Redux-Saga 的开发者,提供按优先级组织的规则与参考资料,指导复杂异步工作流、并发、取消和错误处理。强调以项目规则和源码为准,避免依赖过时记忆。

主要功能

  1. 01Effect 与 yield 使用规则
  2. 02并发、取消与错误处理指导
  3. 03频道及外部 I/O 模式
  4. 04RTK 集成与故障排查
  5. 05常见工作流配方

适用场景

  1. 01实现并发或可取消的异步流程
  2. 02排查 Saga 导致的冻结或漏接操作
  3. 03将 WebSocket 或 DOM 事件接入 Saga

安装

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

$npx skills add https://github.com/anivar/redux-saga-skill --skill redux-saga

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
AGENTS.md
README.md
CHANGELOG.md
.github/
FUNDING.yml
references/
effects-and-api.md
anti-patterns.md
channels.md
recipes.md
fork-model.md
troubleshooting.md
testing.md
rules/
channel-action-channel.md
effect-always-yield.md
effect-select-usage.md
effect-race-patterns.md
effect-use-call.md
error-root-saga.md
effect-take-concurrency.md
channel-event-channel.md
error-saga-cleanup.md
fork-attached-vs-detached.md
recipe-optimistic-update.md
fork-no-race.md
recipe-polling.md
fork-nonblocking-login.md
recipe-throttle-debounce.md
rtk-configure-store.md
rtk-with-slices.md
fork-error-handling.md

详细介绍

Redux-Saga

重要: 关于 redux-saga 的训练数据可能已经过时或不正确——API 行为、中间件设置模式以及与 RTK 的集成都发生了变化。请始终以此技能的规则文件和项目的实际源代码为准。若记忆中的模式与检索到的参考资料冲突,请勿使用记忆中的模式。

何时使用 Redux-Saga

Saga 用于工作流编排——包含并发、取消、竞争或长期运行后台进程的复杂异步流程。对于更简单的模式,优先使用:

需求推荐工具
数据获取与缓存RTK Query
简单异步流程(提交 → 状态)createAsyncThunk
切片内的响应式逻辑createListenerMiddleware
复杂工作流、并行任务、取消、通道Redux-Saga

按优先级划分的规则类别

优先级类别影响前缀
1Effect 与 Yield严重effect-
2Fork 模型与并发严重fork-
3错误处理高error-
4配方与模式中recipe-
5通道与外部 I/O中channel-
6RTK 集成中rtk-
7故障排查低troubleshoot-

快速参考

1. Effect 与 Yield(严重)
  • effect-always-yield — 必须 yield 每个 effect;漏掉 yield 会导致应用冻结
  • effect-use-call — 对异步函数使用 yield call();绝不直接调用
  • effect-take-concurrency — 根据并发需求选择 takeEvery/takeLatest/takeLeading
  • effect-select-usage — 在 select() 中使用选择器函数;绝不直接访问状态路径
  • effect-race-patterns — 使用 race 实现超时和取消;其中只能包含阻塞型 effect
2. Fork 模型与并发(严重)
  • fork-attached-vs-detached — fork 与父任务共享生命周期和错误;spawn 则独立运行
  • fork-error-handling — fork 中的错误会冒泡到父任务的调用方;无法在 fork 处捕获
  • fork-no-race — 绝不在 race 中使用 fork;fork 是非阻塞的,因此总会胜出
  • fork-nonblocking-login — 对需要及时响应登出的身份验证流程,使用 fork+take+cancel
3. 错误处理(高)
  • error-saga-cleanup — 使用 try/finally 配合 cancelled(),正确清理取消操作
  • error-root-saga — 在根 saga 中使用 spawn 隔离错误;避免用 all 启动关键监听器
4. 配方与模式(中)
  • recipe-throttle-debounce — 使用 throttle、debounce、retry 和指数退避进行速率限制
  • recipe-polling — 使用 fork+take+cancel 实现可取消轮询,并在出错时退避
  • recipe-optimistic-update — 使用 race(undo, delay) 实现支持撤销的乐观 UI 更新
5. 通道与外部 I/O(中)
  • channel-event-channel — 通过 eventChannel 将 WebSocket、DOM 事件和计时器接入 saga
  • channel-action-channel — 缓冲 Redux action,以便按顺序处理或通过工作池处理
6. RTK 集成(中)
  • rtk-configure-store — 将 saga 中间件集成到 RTK 的 configureStore,同时不破坏默认设置
  • rtk-with-slices — 使用 createSlice 的 action 创建器,类型安全地触发 saga
7. 故障排查(低)
  • troubleshoot-frozen-app — 应用冻结、action 遗失、错误的堆栈跟踪以及 TypeScript yield 类型

Effect 创建器速查

Effect是否阻塞用途
take(pattern)是等待匹配的 action
takeMaybe(pattern)是类似 take,但会接收 END
takeEvery(pattern, saga)否每次匹配时并发执行
takeLatest(pattern, saga)否取消之前的任务,执行最新任务
takeLeading(pattern, saga)否当前任务完成前忽略后续匹配
put(action)否分发 action
putResolve(action)是分发 action,并等待 promise
call(fn, ...args)是调用函数并等待结果
apply(ctx, fn, [args])是在指定上下文中调用函数
cps(fn, ...args)是Node 风格的回调
fork(fn, ...args)否附加式 fork
spawn(fn, ...args)否分离式 fork
join(task)是等待任务
cancel(task)否取消任务
cancel()否取消自身
select(selector)否查询 store 状态
actionChannel(pattern)否缓冲 action
flush(channel)否清空缓冲消息
cancelled()是在 finally 中检查是否已取消
delay(ms)是暂停执行
throttle(ms, pattern, saga)否限制触发频率
debounce(ms, pattern, saga)否等待一段静默期
retry(n, delay, fn)是通过退避重试
race(effects)是先完成者胜出
all([effects])如果任一子项阻塞并行执行,等待全部完成
setContext(props) / getContext(prop)否 / 是Saga 上下文

模式匹配

take、takeEvery、takeLatest、takeLeading、throttle、debounce 接受:

模式匹配内容
'*'所有 action
'ACTION_TYPE'精确匹配 action.type
[type1, type2]数组中的任意类型
fn => boolean自定义谓词

只有 take/takeMaybe 可以完全省略参数——take() 匹配所有 action。对于 takeEvery、takeLatest、takeLeading、throttle 和 debounce,模式是必需参数; 如需匹配所有 action,请使用 '*'。

从 multicastChannel 接收内容时也必须指定模式:take(chan, '*'),而不是 take(chan)。

使用方法

阅读各规则文件,了解详细说明和代码示例:

rules/effect-always-yield.md
rules/fork-attached-vs-detached.md

每个规则文件都包含:

  • 简要说明其重要性
  • 错误代码示例及说明
  • 正确代码示例及说明
  • 补充背景信息和决策表

参考资料

优先级参考资料阅读时机
1references/effects-and-api.md编写或调试任何 saga 时
2references/fork-model.md处理并发、错误传播和取消时
3references/testing.md编写或审查 saga 测试时
4references/channels.md处理外部 I/O、缓冲和工作池时
5references/recipes.md处理节流、防抖、重试、撤销、批处理和轮询时
6references/anti-patterns.md避免常见错误时
7references/troubleshooting.md调试应用冻结、action 丢失和堆栈跟踪时

完整编译文档

如需查看包含所有展开规则的完整指南:AGENTS.md

评论

支持 Markdown