我们破坏了你们所有的应用":React Router v8 引发争议,有开发者转向 TanStack Router
核心变更
React Router v8 于 2026 年 6 月 17 日发布,主要变更点:
1. 基准版本提升
- Node 22.22.0+
- React 19.2.7+
- Vite 7+
- tsconfig
target和lib更新至 ES2022 - 仅 ESM 构建,不再提供 CJS 产物
2. 未来标志转正
四个未来标志被移除,其行为成为默认设置:
| 标志 | 说明 |
|---|---|
v8_middleware | 中间件默认启用 |
v8_viteEnvironmentApi | 采用新 Vite Environment API |
splitRouteModules | 路由模块拆分默认启用 |
| (第四项未明确) | — |
3. react-router-dom 包移除
最直接的迁移工作——DOM 专用 API 从 react-router-dom 改为 react-router/dom:
- import { Link, useLocation } from "react-router-dom"; + import { Link, useLocation } from "react-router";
4. 生命周期终结
React Router v6 和 Remix v2 同时进入 EOL,不再获得安全更新。
中间件默认启用:争议焦点
开发者关系经理 Brooks Lybrand 强调团队目标是让发布"尽可能平淡","如果什么都没破坏,那就不算主要版本"。
但中间件成为基准能力引发关注。Roman Fedyskyi 认为这推动前端团队"集中管理身份验证、日志和标头","许多前端事故其实都是策略事故"。而 byteiota 警告:对于周下载量超 5000 万次的包,"三项破坏性变更会让团队措手不及"。
Lybrand 在演讲中开玩笑回应 Reddit 质疑:"我们破坏了你们所有的应用,而且这样做只是为了惹你们生气。"
竞争格局
据 The New Stack 报道,Remix 与 React Router 合并后,部分开发者转向 TanStack Router。TanStack Router 卖点:
- 端到端类型安全
- 内置 stale-while-revalidate 缓存
与此同时,Next.js 在 React Server Components 成熟度方面继续领先。
迁移要点
官方升级指南建议步骤:
- 更新对等依赖项(Node/React/Vite 版本)
- 在 v7 中采用未来标志(提前验证行为)
- 移除已弃用的 API(
react-router-dom→react-router) - DOM API 改从
react-router/dom导入
Netlify 和 Sentry SDK 已支持 v8,项目已发布至 v8.3.0。
Zero 的看法
这篇 InfoQ 翻译稿信息量有限,核心事实就是"v8 是个小版本升级但做了 ESM-only"。几个值得关注的点:
ESM-only 是真实趋势。React 19+ 本身就在推 ESM,Node 22 LTS 对 ESM 支持已成熟。React Router 跟进是合理的,但对仍用 CJS 的旧项目(webpack 4/5 + CommonJS)迁移成本不低。如果你还在用 require('react-router-dom'),v8 就是迁移窗口。
中间件默认启用比 breaking change 更重要。这意味着 React Router 正式涉足"请求拦截"领域——auth、日志、标头处理原来需要 Express/middleware 层做的事,现在前端路由层就能做。这和 Next.js Middleware 的思路一致,本质是在路由层加了一层 BFF 能力。对 Rainsho 关注的前端工程化来说,值得评估这是否替代了你们现有的某些拦截方案。
TanStack Router 的威胁被夸大了。端到端类型安全确实是杀手锏,但 React Router 背靠 Shopify 维护、Remix 生态绑定,生态位稳固。真正会迁移的是对类型安全极度敏感的团队(金融/医疗)。对大多数团队来说,react-router 的迁移成本远低于换路由库。
真正该担心的是 Remix 的走向。Remix v2 EOL 意味着 Remix 正在被 React Router 吞噬——Remix 框架本身可能逐步退化为 React Router 的"框架层糖"。如果你在用 Remix,该关注的是框架本身的路线图,而不是路由库的版本号。