mcpField
R
reatom-async

reatom-async

github.com/reatom开发1.4k58 次安装1 天前更新
代码仓库

关于 reatom-async

reatom-async 是聚焦 Reatom 异步行为的开发技能,面向实现和审查异步流程的开发者。它整理查询、命令、取消、采样和 Suspense 的参考章节,并给出对应的实现与审查惯例。

主要功能

  1. 01按主题查找异步参考内容
  2. 02区分查询与变更处理模式
  3. 03说明异步边界的上下文规则
  4. 04涵盖取消、竞态与节流
  5. 05提供加载状态和重试指引

适用场景

  1. 01实现 Reatom 异步查询或命令
  2. 02检查 await 后的上下文处理
  3. 03设计取消、节流或竞态流程

安装

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

$npx skills add https://github.com/reatom/reatom --skill reatom-async

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

附带文件REFERENCE.md

详细介绍

Reatom Async

当任务主要涉及 Reatom 异步行为时,使用此技能。将 REFERENCE.md 视为随附的异步行为权威资料。

使用方法

  1. 只阅读 REFERENCE.md 中与任务相关的部分。
  2. 优先使用 Reatom 异步模式,而不是防抖库、挂载时获取数据、refs、本地组件 Promise 状态或手动管理 AbortController。
  3. 对于一般的 Reatom 建模,使用 reatom 技能。对于 @reatom/jsx 的 DOM JSX 细节,使用 reatom-jsx。对于代码审查,将此技能与 reatom-review 结合使用。
  4. 如果文档、源码和测试之间存在分歧,以源码和测试为准,然后修正文档或示例中的过时内容。

章节索引

  • 查询和变更:Choosing the Primitive、withAsyncData、withAsync
  • await 之后的上下文:wrap Rules
  • 取消:withAbort、abortVar and Fetch Signals
  • 防抖、节流、等待、竞态:Sampling and Procedural Async
  • Redux-saga 迁移:Redux-Saga Mapping
  • 加载 UI 和重试:Status, Retry, Reset
  • Suspense:Suspense Boundaries
  • 代码审查:Common Mistakes、Tested Edge Cases

实现默认做法

  • 查询/读取数据:computed(async () => ...).extend(withAsyncData({ initState }))。
  • 命令/变更:action(async () => ...).extend(withAsync(...));当过时调用必须停止时,添加 withAbort(...)。
  • 每个离开 Reatom 帧的异步边界都要使用 await wrap(promise)。
  • 调用 Reatom 状态/操作的外部回调,应通过 wrap(fn) 传入或使用 onEvent 进行连接。
  • 可取消的 fetch 使用 signal: abortVar.require().signal 或有作用域的 abortVar.subscribe()。
  • 防抖和节流遵循采样文档中的模式:在流程中使用 await wrap(sleep(ms)),并搭配 withAbort() 策略,而不是拆分的防抖辅助工具。
  • 路由/页面数据应放在路由加载器或异步计算中,而不是组件副作用中。
  • 表单提交属于异步变更:将其放入 reatomForm({ onSubmit }),并使用字段的 validate 进行异步/依赖检查(通过 await wrap(sleep(ms)) 实现防抖),而不是手动编写提交操作或防抖验证器。
  • Suspense 用于全局的一次性初始化,而不是动态页面数据。

审查默认规则

  • 标记在调用 atom/action 之前未使用 wrap 的 await。
  • 若查询数据使用了 withAsync,而 .data 应由 withAsyncData 管理,则标记。
  • 若过时的命令调用可能更新状态,但 withAsync 未搭配 withAbort,则标记。
  • 未使用 { status: true } 的 .status(),应标记。
  • 未使用 { cacheParams: true } 的操作 .retry(),应标记。
  • withCache() 放在 withAsync() / withAsyncData() 之前,应标记。
  • 将取消显示为业务错误,应标记。
  • 需要清理未获胜任务时,应标记直接使用 Promise.race。

评论

支持 Markdown