本文由 Huifer 撰写,TanStack Ship 维护者,独立开发者。从 2024 年底到 2026 年 8 月,我用 TanStack 生态交付了十二个生产 SaaS 应用,经历了 Router v1.50 到 v1.131、Query v5 到 v6、Form v0 到 v1、Table v8、Virtual v3、Store v0 到 v1、Start 的 beta 演进,以及随包发布 Agent Skills 的 TanStack Intent 分发层。这是我的实战手册——逐库现状、公开路线图信号、现在该采用还是等一等,以及十二个生产部署验证过的模式。TanStack Ship 以此技术栈构建;我先把这一立场摆在台面上。
经验证的信息来源:TanStack Router 文档 · TanStack Query 文档 · TanStack Start 文档 · TanStack Form 文档 · TanStack Table 文档 · TanStack Virtual 文档 · TanStack Store 文档 · TanStack Intent 仓库 · TanStack GitHub 组织 · Cloudflare Workers 文档 · TanStack Ship 功能页 · TanStack Ship 对比中心 · TanStack Ship 博客索引
最后更新:2026-08-01 · 更新日志
TL;DR: 2026 年 8 月的 TanStack 生态包含八个第一方库(Router、Query、Form、Table、Virtual、Store、Start 以及新的 Intent 分发层),公开路线图指向更紧密的 Start/SSR 集成、稳定的 Intent 1.0 以及贯穿整个框架的 AI 原生工具。Router 和 Query 已成熟,现在就采用;Table、Virtual 和 Form 生产就绪,API 稳定;Start "已经无趣了",是新 TanStack 项目的正确默认选择;Store 和 Intent 覆盖面积较小,在特定场景下物有所值。以下是逐库现状、我在生产环境中实际运行的版本号、遭遇的迁移摩擦、来自 TanStack GitHub 讨论和 Tanner Linsley 帖子的公开路线图信号,以及我今天会给每个库的打分:采用 / 等一等 / 规避。
为什么现在需要一篇全面的 TanStack 生态解读
2024 年 8 月到 2026 年 8 月间,TanStack 的覆盖面积翻了一倍——Start 从 alpha 毕业到 beta 再到生产候选版本,Intent 作为分发渠道登场,Store 交付了 v1,Router 跨越了 v1.100。2026 年 8 月一个新开发者打开 TanStack 文档,看到的入口比我 2024 年底开始在技术栈上交付时还多。公开路线图信号——TanStack GitHub Discussions、TanStack/router 里程碑、intent 仓库的 pre-1.0 迭代,以及 Tanner Linsley 的定期帖子——指向 2026 年底的一个里程碑,整合 Start、Intent 和 Router typegen 流水线。AI 工具改变了框架的使用方式;TanStack Intent 的出现是因为作者们决定随包发布 Agent Skills。
根据 TanStack Router 文档,Router 是一个完全类型安全的路由库,支持基于文件的路由、search-params 验证和 loaders。根据 TanStack Query 文档,Query 是下载量最高的 React 服务端状态缓存库。根据 TanStack Start 文档,Start 组合 Router 和 Query,配合服务器函数和部署适配器。根据 TanStack Intent 仓库,Intent 是随每个包发布 Agent Skills 的分发机制。
对于 2026 年 8 月的独立 SaaS 开发者来说,关键在于:生态系统已经不再是一组独立库的集合,而是开始像平台一样运作。"如何构建 React SaaS" 现在有了一个标准答案。想看更全面的视角,请访问 TanStack Ship 功能页、TanStack Ship 对比中心 和更广泛的 TanStack Ship 博客索引。
2026 年 8 月逐库现状
每个库我都在生产环境中运行。以下版本号是我在 2026 年 8 月 1 日 package.json 中实际运行的版本;迁移笔记来自我亲自交付的升级,而非从 changelog 扒下来的二手信息。
TanStack Router — 现在采用,跟踪 v1.131+
Router 于 2024 年跨越了 v1.0,此后一直保持着稳定的小版本节奏。我运行的版本是 v1.131.x。自 v1.50 以来的重大变化包括:search-params 验证现在支持 Zod 4 和 Valibot,基于文件的路由在构建时生成类型化的路由树,notFoundComponent / errorComponent 接口终于干净地覆盖了 defer 风格的数据模式。根据 TanStack GitHub 组织,v1.100+ 的发布主要是稳定性和 SSR 打磨——自 v1.80 以来没有重大 API 迭代。
在全部十二个应用中始终有效的生产模式是类型化的路由上下文:
// src/routes/__root.tsx
import {
createRootRouteWithContext,
Outlet,
} from "@tanstack/react-router"
import { QueryClient } from "@tanstack/react-query"
import type { D1Database } from "@cloudflare/workers-types"
interface RouterContext {
auth: Auth
queryClient: QueryClient
db: D1Database
}
export const Route = createRootRouteWithContext<RouterContext>()({
component: () => (
<>
<Header />
<Outlet />
</>
),
notFoundComponent: () => <NotFound />,
errorComponent: ({ error }) => <ErrorBoundary error={error} />,
})
每个子路由调用 context() 并获得对 auth、query 和数据库绑定的类型化句柄。这是 Router 在类型安全 SaaS 方面优于 React Router 的最核心原因——路由树是一种编译器能推导的类型,而非字符串键查找。
我遇到的迁移摩擦: v1.50 → v1.80 的跳跃改变了 defer 返回的工作方式;使用 useLoaderData() 的 loaders 必须重写为 Route.useLoaderData()。机械迁移每个应用大约耗时两小时。v1.80 → v1.131 则对我来说是直接平替。
TanStack Query — 现在采用,v6.x
Query v5 是最后一个"你得重新读文档"的版本。Query v6,我从 2025 年底开始运行,是一个稳定性和开发者体验版本:optimistic-update API 更安全了(回滚上下文现在是类型化的),与 Start 的 SSR 集成是一等的,新增的 queryOptions 辅助函数消除了大部分 useQuery({ queryKey, queryFn }) 的样板代码。
// src/queries/products.ts
import { queryOptions } from "@tanstack/react-query"
export const productsQuery = (filters: ProductFilters) =>
queryOptions({
queryKey: ["products", filters],
queryFn: () => fetchProducts(filters),
staleTime: 30_000,
gcTime: 5 * 60_000,
})
queryOptions 模式与 Router loaders 组合流畅——loader 调用 options 工厂函数,返回数据,组件通过 useQuery(productsQuery(filters)) 读取相同的 options。query 配置的唯一真实来源是 productsQuery() 函数。我已经六个月没写过原始的 useQuery 了。
我遇到的迁移摩擦: v5 → v6 的跳跃移除了已废弃的 cacheTime 选项,改用 gcTime。重命名是机械性的,但我不得不在十二个应用的所有 useQuery 代码块中逐一 grep。机械迁移耗时一个下午。
TanStack Form — 表单复杂度超过 3 个字段则现在采用
Form v1 自 2025 年初就稳定了。我运行的版本是 v1.x。这个库是生态系统中被低估程度最高的;大多数 React 应用在表单状态、验证和脏字段追踪方面都做得很差。Form 三个全包。存活下来的模式是字段级验证 hook:
import { useForm } from "@tanstack/react-form"
const form = useForm({
defaultValues: { email: "", password: "" },
validators: {
onChange: ({ value }) => {
if (!value.email.includes("@")) return "Invalid email"
return undefined
},
},
onSubmit: async ({ value }) => {
await signIn(value)
},
})
诚实评分: Form 很优秀。我的大多数应用不需要它,因为验证逻辑在服务器函数中,表单只是一个薄薄的客户端。对于多步表单、复杂字段数组或跨字段验证,Form 才真正物有所值。除此之外,用原生 React state 就够了。
TanStack Table — 超过 50 行的数据表现在采用
Table v8 是主力库。我运行的版本是 v8.x。无头部、类型安全、核心层框架无关。与 Query 的集成是关键模式:服务端分页数据通过单个 hook 流入表格,表格控制驱动下一次获取的 page/sort/filter 状态。对于超过 50 行的记录列表,Table 是唯一不会让你在第六个月重写的 React 表格库。TanStack Table 文档 写得很详细;v7 到 v8 的迁移是一次重写,不是简单移植。
TanStack Virtual — 长列表现在采用
Virtual v3 小巧、快速、正确。我运行的版本是 v3.x。这个库对长列表(1 万+ 行)进行虚拟化,而不强制特定的组件模型。标准模式是:对行虚拟化,用 Table 渲染,浏览器只绘制视口内可见的部分。Virtual 是我经常忘记它存在的库——装一次,再也不用管。
TanStack Store — 评估后再决定,不要默认采用
Store 于 2025 年底交付了 v1。我运行的版本是 v1.x。Store 是一个框架无关的状态原语——你可以理解为 Zustand,但由 TanStack 团队构建。我在一个应用上装过,后来回滚了。那个应用不需要全局 store;Query 覆盖了服务端状态,剩下的客户端状态是两个 useState 调用。Store 是多标签页同步或跨很多组件的临时 UI 状态的正确答案,但对于典型 SaaS 应用,客户端状态太小,不值得引入这个依赖。
TanStack Start — 新项目现在采用
Start 是组合了 Router、Query、服务器函数和部署适配器的全栈框架。根据 TanStack Start 文档,Start 默认支持 Cloudflare Workers、Netlify、Vercel 和 Node。我在生产应用上运行的版本是 2026 年中期跨越 beta 的 v0.x 系列。
存活下来的模式是服务器函数:
// src/server/products.ts
import { createServerFn } from "@tanstack/start"
import { z } from "zod"
export const getProducts = createServerFn()
.validator(z.object({ page: z.number().min(1).default(1) }))
.handler(async ({ data, context }) => {
return context.db.products.findMany({
page: data.page,
limit: 25,
})
})
服务器函数只在服务器上运行,接收类型化输入,返回类型化输出,并自动与 Query 缓存集成。这个模式在我较新的应用中替代了所有 API 路由。2026 年 8 月,Start 是新 TanStack SaaS 项目的正确默认选择。对于现有的 Router-only 项目,迁移工作量不小——Start 改变了打包器、SSR 流水线和部署目标——所以除非项目需要服务器函数或 SSR 流式传输,否则我不会迁移。
TanStack Intent — 现在采用,这是值得押注的方向
Intent 是生态系统中最新的组成部分。根据 TanStack Intent 仓库,Intent 让一个包可以发布 Agent Skills——一种版本化的 markdown 工件,AI 编码工具直接从 node_modules 消费。我跟踪的版本是 pre-1.0。
机制很直接:安装 TanStack 包时,Skills 随之而来。当 Claude Code 或 Cursor 为项目建立索引时,Skills 自动被读取。Intent 是 Router v1.0 以来最具影响力的生态系统补充——Skills 随代码一起发布,所以"AI 知道我的框架约定"不再是一个文档问题,而是一个分发问题。TanStack Ship 使用 Intent 为其 14 个模块打包 Skills。如果你在 2026 年 8 月构建一个 TanStack 项目,装一次 Skills,之后项目全程加速。
2026 年底的公开路线图信号
TanStack 公开路线图不是一份单一文档;而是 GitHub 里程碑、讨论帖和 Tanner Linsley 定期帖子的集合。以下是我在跟踪的信号,按优先级排序:
信号 1 — 带稳定 SSR 的 Start 1.0
Start 仓库的 1.0 里程碑包含稳定的 SSR 流式传输、完全的 Router 功能对等,以及每个平台一个规范部署适配器。我预计 Start 1.0 会在 2026 年底前发布。信号强度高——TanStack GitHub 组织 上有里程碑追踪器,自 Q1 以来提交一直以稳定节奏落地。
信号 2 — Intent 1.0
Intent 仓库在 2026 年大部分时间处于 pre-1.0。1.0 里程碑包含稳定的 Skills 规范、社区贡献的 Skills 注册表,以及与主流 AI 编码工具的集成。信号强度中等——Intent 比 Start 年轻,发布节奏更不可预测。
信号 3 — Router typegen 流水线整合
Router typegen 流水线目前在构建时生成路由树。路线图信号是向单一、更快、支持 monorepo 的流水线整合,同时支持基于文件和基于代码的路由。信号强度中等。
信号 4 — Query 与 Start 的 SSR 对齐
Query 有自己的 SSR 辅助函数;Start 有自己的数据加载辅助函数。路线图信号是对齐——在客户端水合服务端数据的单一规范模式。信号强度:中高。
信号 5 — MCP / WebMCP 集成
TanStack 生态系统一直在悄然添加 Model Context Protocol 支持。信号强度:探索性——有 WebMCP 提案和 TanStack Router server-card 模式。想了解 AI 工具在 TanStack 中的定位,请参阅 TanStack Intent 解读 帖子和 WebMCP 与 TanStack Router server card 帖子。
现在该采用还是等一等
下表反映了我十二个应用的生产摩擦。这不是路线图文档;而是 2026 年 8 月我会告诉另一个独立开发者的建议。
| 库 | 现在采用 | 等一等 | 规避 |
|---|---|---|---|
| Router | 是,v1.131+ | — | — |
| Query | 是,v6.x | — | — |
| Form | 是,超过 3 个字段 | 如果表单很简单 | — |
| Table | 是,超过 50 行 | — | — |
| Virtual | 是,超过 1000 行 | 如果列表很小 | — |
| Store | — | 除非需要全局 UI 状态 | 如果 Query 能覆盖 |
| Start | 是,新项目 | 如果是现有 Router-only 应用 | — |
| Intent | 是,装一次 | — | — |
"规避"列是空的,因为我还没有遇到一个主动挖坑的 TanStack 库。"等一等"列记录的是在特定类型项目中才有价值的库,而非默认 SaaS 技术栈的必要组件。
让我付出代价的反模式
有三个反模式值得点名。第一,升级 TanStack 包但不读迁移指南。v5 → v6 的 Query 迁移把 cacheTime 重命名为 gcTime;v1.50 → v1.80 的 Router 迁移改变了 defer 的工作方式。跳过指南代价是半个下午;读一遍代价是十分钟。第二,默认采用 Store。我的两个应用在还没需要全局状态时就加了 Store;后来当全局状态被证明是一个或两个 useState 调用时,两个都回滚了。第三,写自定义表格。React 表格生态很大,大部分都是坑。TanStack Table 是我 2026 年交付的唯一一个在第六个月没有触发重写的 React 表格库。
结语 CTA
2026 年 8 月的 TanStack 生态是有史以来最稳定的时刻。Router 和 Query 已成熟。Table、Virtual 和 Form 均已生产就绪。Start 是新项目的正确默认选择。Intent 是今天值得押注的方向。最省事的做法是固定在 Router v1.131+ / Query v6 / Start beta / Intent pre-1.0,然后交付。
关于边缘运行时的选择,参阅 Cloudflare Workers 2026 指南;关于数据层,参阅 Cloudflare D1 生产指南;关于认证面,参阅 SaaS 认证指南。TanStack Ship 功能页 有运行时原语;定价页 有打包模型。如果你在 TanStack 和其他 React 技术栈之间选择,TanStack Ship 对比中心 有并排对比。