本文由 Huifer 撰写,TanStack Ship 的独立开发者与维护者。 我自 2021 年起就在 Next.js 上构建应用,2026 年初为一个客户项目评估了 TanStack Start。说句实在话:大多数生产级应用现在选 Next.js 是对的。如果已经深度投入 TanStack 生态,需要跨路由、数据和表单的原生集成,那 TanStack Start 是对的。这个对比,是我给问「我该用 TanStack 还是 Next.js」的客户的答案——真正的答案取决于你说的「TanStack」到底指什么。
已核实来源:Next.js 文档 · TanStack Start · Next.js GitHub 最后更新:2026-09-18 · 更新日志
TL;DR:「TanStack vs Next.js」其实是两个不同的问题,取决于你怎么定义「TanStack」:(1)TanStack Start 与 Next.js 作为 SSR 框架的对比——Next.js 在成熟度上胜出;(2)TanStack 库与 Next.js 作为整体的对比——它们是互补关系,不是竞争关系。TanStack Query、TanStack Router 和 TanStack Form 都跑在 Next.js 应用里。
一次搜索背后的两个问题
每月 55 次对「TanStack vs Next.js」的搜索,其实拆成了两个截然不同的问题:
问题 A:「我该用 TanStack Start 还是 Next.js 作为框架?」——这才是一个合理的对比。
问题 B:「我该在我的 Next.js 应用里用 TanStack 库吗?」——这不是个问题,答案是肯定的,而且这才是最常见的使用场景。
问题 A:TanStack Start vs Next.js 作为框架
这是货真价实的对比。两者都是 React 的 SSR 元框架。
| 功能 | TanStack Start | Next.js |
|---|---|---|
| 状态 | Alpha | Stable(v14–15) |
| SSR | 支持 | 支持(App Router) |
| 路由 | TanStack Router(代码驱动) | 文件驱动(App Router) |
| 数据加载 | TanStack Query loaders | Server Components + fetch |
| 表单 | TanStack Form | React Hook Form / Server Actions |
| TypeScript | 深度集成(路由树推导) | 深度集成(Server Components) |
| 生态 | 早期 | 庞大 |
| 部署 | Cloudflare Workers、Node | Vercel、Node、Cloudflare |
| 学习曲线 | 较陡(新范式) | 中等 |
Next.js 胜在:生态成熟度、社区规模、部署选项、文档深度,以及 App Router 的服务端优先模型。
TanStack Start 胜在:与 TanStack 库套件的原生态集成、代码驱动的路由树配合完整的 TypeScript 类型推导,以及整个技术栈上一致的心智模型。
结论:今天新建生产级应用,选 Next.js。对于已经全面采用 TanStack Query、TanStack Router 和 TanStack Form 的全新应用,等 TanStack Start 达到 beta 后再评估。
问题 B:TanStack 库 + Next.js = 标准实践
最常见的使用场景:基于 Next.js 的应用引入 TanStack 库。这不是竞争,而是许多团队的默认架构。
// TanStack Query 与 Next.js App Router 配合使用
// app/users/[id]/page.tsx
import { QueryClient } from '@tanstack/react-query'
import { useQuery } from '@tanstack/react-query'
async function getUser(id: string) {
const res = await fetch(`${process.env.API_URL}/users/${id}`)
if (!res.ok) throw new Error('Failed to fetch user')
return res.json()
}
async function UserPage({ params }: { params: { id: string } }) {
const user = await getUser(params.id) // Server Component 数据获取
return (
<UserDetail user={user} />
)
}
function UserDetail({ user }: { user: any }) {
// Client Component:TanStack Query 负责客户端缓存与更新
const { data, refetch } = useQuery({
queryKey: ['user', user.id],
queryFn: () => getUser(user.id),
initialData: user, // 从服务端数据 hydrate
})
return (
<div>
<h1>{data.name}</h1>
<button onClick={() => refetch()}>Refresh</button>
</div>
)
}
这种模式——Server Components 负责初始数据,TanStack Query 负责客户端缓存与更新——是 Next.js 应用处理复杂数据需求的推荐架构。
生态对比
Next.js:一个框架覆盖路由、SSR、API 路由和部署。生态极其庞大。在 Stack Overflow 上几乎能找到任何 Next.js 问题的答案。
TanStack 生态:多个专注的库,彼此深度集成。适合 TanStack 库天然契合的应用场景(数据密集型、复杂状态、类型安全路由)。文档相对较少,社区规模更小。
对于独立开发者或小团队:Next.js 有社区优势。对于已经在用 TanStack Query 和 TanStack Router 的团队:生态集成优势更明显。
Next.js 占优的场景
- 第一个 Next.js 项目——生态和文档无可匹敌
- 与外部团队合作的项目——Next.js 是公认的确定性选择
- 需要 App Router 服务端优先模型的项目
- 需要 Vercel 部署并使用 Edge Functions 的项目
- ISR(Incremental Static Regeneration)是核心需求的应用
TanStack Start(或 TanStack 生态)占优的场景
- 已在使用 TanStack Query 获取数据的应用
- 需要 TanStack Router 类型安全路由树的应用
- 有复杂嵌套数据依赖、TanStack Query 缓存失效模型天然契合的应用
- 全面采用 TanStack 心智模型的团队
TanStack Ship 基于 TanStack 生态构建(非 Next.js),部署在 Cloudflare。 查看完整功能列表和部署文档。