SuperAPI AI 工具集

reactor-async

前端与建站

查看项目

更新于 10-16 00:31

技能介绍

用途:在 Reactor 中替代 UseState + UseEffect + 手动取消的异步数据写法。读取返回 AsyncValue<T>(Loading、Data、Error、Reloading 四态),写入返回 Mutation 句柄。钩子负责取消令牌、兄弟组件去重、共享 QueryCache 缓存,并在卸载时丢弃迟到结果。可在任意 Component 子类直接使用,也可作为 RenderContext 扩展方法用于函数组件(Memo(ctx => ...) 或 RenderEachTime(ctx => ...))。

主要能力:UseResource 做单次读取,支持 StaleTime、CacheTime、RetryCount、RefetchOnMount、RefetchOnWindowFocus、CacheKey 等选项;UseMutation 支持 OnOptimistic、OnSuccess、OnError 与 InvalidateKeys,乐观更新同步执行,失败则不触发 mutator;UseInfiniteResource 采用拉取模型,配合虚拟列表按需取页,提供 ItemAt、EnsureRange、FetchNext、Retry、Refresh 等成员;Pending 为含多个独立资源的子树提供统一加载兜底,Reloading 不会重新触发兜底。

使用方式:读取用 UseResource(ct => Api.GetUserAsync(userId, ct), deps: new object[] { userId }),用 switch 或 Match 处理四态;写入用 UseMutation 并在点击处理器中调用 RunAsync;分页用 UseInfiniteResource 并在虚拟化 renderItem 中调用 ItemAt。

限制:fetcher 必须幂等且需观察 ct,非幂等写入会被分析器 REACTOR_HOOKS_006 警告;deps 必须可值比较,复杂依赖需用 UseMemo 记忆;不要在不相关钩子间共享 CacheKey;UseInfiniteResource.Items 为服务端来源且不可变,乐观编辑需另用覆盖字典;游标分页为串行,并行偏移分页需以偏移作为游标类型。更多细节见 docs/guide/async-resources-cookbook.md、docs/reference/async-system.md 与 docs/specs/020-async-resources-design.md。