关于 reatom-async
reatom-async 是聚焦 Reatom 异步行为的开发技能,面向实现和审查异步流程的开发者。它整理查询、命令、取消、采样和 Suspense 的参考章节,并给出对应的实现与审查惯例。
主要功能
- 01按主题查找异步参考内容
- 02区分查询与变更处理模式
- 03说明异步边界的上下文规则
- 04涵盖取消、竞态与节流
- 05提供加载状态和重试指引
适用场景
- 01实现 Reatom 异步查询或命令
- 02检查 await 后的上下文处理
- 03设计取消、节流或竞态流程
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ reatom/ reatom --skill reatom-async安装后在 Claude Code 中输入/reatom-async确认已加载。
附带文件REFERENCE.md
详细介绍
Reatom Async
当任务主要涉及 Reatom 异步行为时,使用此技能。将 REFERENCE.md 视为随附的异步行为权威资料。
使用方法
- 只阅读 REFERENCE.md 中与任务相关的部分。
- 优先使用 Reatom 异步模式,而不是防抖库、挂载时获取数据、refs、本地组件 Promise 状态或手动管理 AbortController。
- 对于一般的 Reatom 建模,使用
reatom技能。对于@reatom/jsx的 DOM JSX 细节,使用reatom-jsx。对于代码审查,将此技能与reatom-review结合使用。 - 如果文档、源码和测试之间存在分歧,以源码和测试为准,然后修正文档或示例中的过时内容。
章节索引
- 查询和变更:
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