mcpField
T
tanstack-db

tanstack-db

github.com/oakoss开发20129 次安装11 周前更新
代码仓库

关于 tanstack-db

TanStack DB 是面向数据密集型界面的 beta 版响应式客户端存储,为 TanStack Query 增加类型化集合、实时查询和乐观变更。

主要功能

  1. 01类型化数据集合
  2. 02响应式实时查询
  3. 03跨集合连接与聚合
  4. 04失败时回滚的乐观变更
  5. 05多种同步模式

适用场景

  1. 01构建本地优先的响应式界面
  2. 02查询并连接动态集合
  3. 03通过持久化处理器应用乐观编辑

安装

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

$npx skills add https://github.com/oakoss/agent-skills --skill tanstack-db

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

包含的文件

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

references/
electricsql-integration.md
error-handling.md
live-queries.md
local-and-storage-collections.md
multi-collection.md
mutations.md
setup.md

详细介绍

TanStack DB

概述

TanStack DB 是一个基于差分数据流构建的响应式客户端存储,通过集合、实时查询和乐观变更扩展 TanStack Query。它将数据规范化为类型化集合,支持亚毫秒级跨集合查询,并提供即时乐观更新,失败时自动回滚。

适用场景: 需要本地优先数据的响应式 UI、支持实时更新的跨集合联接、带自动同步的乐观变更、通过 ElectricSQL 或其他后端进行实时同步,以及超出 TanStack Query 按查询缓存模式能力的应用。

不适用场景: 简单的获取并显示(仅使用 TanStack Query 即可)、仅使用服务器组件的应用、纯同步本地状态(使用 useState/Zustand),以及采用规范化缓存的 GraphQL(Apollo/urql)。

TanStack DB 目前处于 beta 阶段。不同版本之间的 API 可能会发生变化。

快速参考

模式API要点
创建集合createCollection(queryCollectionOptions({...}))使用 getKey 定义一组类型化对象
实时查询(React)useLiveQuery((q) => q.from({...}).where(...))底层数据变化时自动更新
筛选.where(({ t }) => eq(t.field, value))支持 eq、gt、lt、like、and、or、not
选择字段.select(({ t }) => ({ id: t.id, name: t.name }))从集合中投影特定字段
排序结果.orderBy(({ t }) => t.field, 'asc')按升序或降序排序
联接集合.join({ b: collB }, ({ a, b }) => eq(...), 'inner')类型安全的跨集合联接
分组和聚合.groupBy(...).select(({ t }) => ({ count: count(t.id) }))支持 count、sum、avg、min、max
插入collection.insert({ ...data })乐观插入,通过 onInsert 处理器同步
更新collection.update(key, (draft) => { ... })Immer 风格的草稿变更,通过 onUpdate 同步
删除collection.delete(key)乐观删除,通过 onDelete 处理器同步
Electric 同步electricCollectionOptions({ shapeOptions: {...} })通过 ElectricSQL 实时同步 Postgres
实时查询集合liveQueryCollectionOptions({ query })根据实时查询定义派生集合
本地存储localStorageCollectionOptions({...})持久化本地数据,并在多个标签页间同步

同步模式(v0.5+)

模式行为适用场景
预加载(默认)集合初始化时加载所有记录小型数据集(少于 1k 行)
按需仅加载查询请求的数据(谓词下推)大型数据集、选择性加载
渐进式快速完成首次绘制,在后台同步完整数据集兼顾两者,适用于 100k+ 条数据

常见错误

错误正确做法
直接使用 TanStack Query 管理本地状态使用集合和实时查询处理响应式本地数据
忘记在集合配置中设置 getKey始终提供 getKey,以唯一标识各项
未提供持久化处理程序定义 onInsert/onUpdate/onDelete,以便与服务端同步
使用 useQuery 而不是 useLiveQueryuseLiveQuery 支持响应式跨集合查询
在组件内部创建集合在模块作用域中定义集合,而非在组件内部
在 React 应用中从 @tanstack/db 导入从 @tanstack/react-db 导入(重新导出核心功能)
期待在未配置的情况下自动与服务端同步集合需要显式配置持久化处理程序才能同步
未安装集合类型包安装 @tanstack/query-db-collection 以使用 REST API

委派

如果有 tanstack-query 技能,请将 TanStack Query 特定模式(查询键、缓存失效、SSR)委派给它。 否则,建议使用:npx skills add oakoss/agent-skills --skill tanstack-query 如果有 electricsql 技能,请将 ElectricSQL 设置、形状、身份验证代理和写入模式委派给它。 否则,建议使用:pnpm dlx skills add oakoss/agent-skills -s electricsql -a claude-code -y 如果有 local-first 技能,请将架构决策、同步引擎对比和冲突解决委派给它。 否则,建议使用:pnpm dlx skills add oakoss/agent-skills -s local-first -a claude-code -y

  • 查询模式探索:使用 Explore Agent
  • 架构审查:使用 Task Agent

参考资料

评论

支持 Markdown