为什么决定把 Vue 迁到 React 19
这一篇可能会得罪一些 Vue 党。但我得说清楚:这不是”React 比 Vue 好”的文章。这是一个具体的业务场景,在 2025 年 4 月这个时间点,做出的一次有立场的选型。
如果你看完不同意,欢迎来吵。
先说背景
到 2025 年初,我们的状态是这样的:
- 前端 13 个工具,全栈 Vue 2.7 + Webpack
- 组件库 15+ 组件,基于 Vue 2.7
- pnpm monorepo + Turbo 并行构建,跑得很顺
- 测试覆盖率核心模块 93%
一切看起来挺好。但有两个阴影一直在变大。
Vue 2.7 的倒计时
Vue 2.7 是 Vue 2.x 的最后一个 minor 版本,2022 年 7 月发布。它的意义是给 Vue 2 项目一个”升级到 Composition API”的过渡通道。但它本身就有 EOL(End of Life)——2023 年 12 月 31 日,Vue 2 全线停止维护。
到 2025 年,我们跑的是一个已经停止维护一年多的框架。
这意味着什么?
- 安全漏洞没人修。CVE 来了,你得自己 fork 一个分支打补丁。
- 生态在退场。
vue-router@3、vuex@3这些配套库也不再维护了。新版本的 Vue Router、Pinia 都是面向 Vue 3 的。 - 招人越来越难。2025 年的市场上,简历上写”精通 Vue 2”的候选人越来越少。年轻前端工程师学的是 React 或 Vue 3,没人主动去学一个 EOL 框架。
有人会说:那升 Vue 3 不就行了?
是的,Vue 3 是一个选项。但我们认真评估之后,觉得 React 19 更适合我们的场景。下面讲为什么。
升 Vue 3 vs 迁 React 19
这是当时摆在桌面上的两个方案。我逐条对比。
生态:React 在金融工具场景的积累更厚
我们的工具不是内容站,是重交互的数据工具——表格、表单、图表、拖拽、实时计算。这类场景下 React 生态的优势是实打实的:
- ag-Grid / TanStack Table:金融报表的事实标准,React 版本的功能领先 Vue 版本一个身位。
- TanStack Query:服务端状态管理,和我们的 Spring Boot API 配合极好。
- Recharts / Nivo:数据可视化生态比 Vue 那边丰富太多。
- react-hook-form:复杂表单的方案,Vue 那边
vee-validate能用但生态差距明显。
选框架不是选语言,是选生态。生态决定了你能不能站在巨人的肩膀上。
Vue 3 也有生态,但坦率说,在”金融数据工具”这个细分领域,React 的生态厚度是 Vue 比不了的。这不是主观偏好,是客观差距。
类型系统:TS + React 的体验更好
Vue 2.7 的 TypeScript 支持是”能跑”但不”舒服”。defineComponent 的类型推导经常在复杂场景下断链,template 里的类型检查基本靠 VS Code 插件硬撑。
Vue 3 在类型上进步很大,但 React + TypeScript 是从底层设计的类型优先:
1 | // React 里一个 props 类型的定义,干净利落 |
Vue 那边要达到同样的类型体验,需要 defineProps + 泛型 + macros 的组合,心智负担更重。
React 19 的吸引力
React 19 在 2024 年 12 月正式发布。到 2025 年 4 月我们做决策时,它已经稳定了 4 个月,社区反馈很充分。几个点让我特别心动:
Server Components:虽然我们暂时用不上 RSC,但 React 19 的架构方向让”按需加载”变成了框架级别的能力。
Actions 和 useFormStatus:表单提交的状态管理终于不用自己造轮子了。金融工具里有大量表单,这个特性直接干掉了一大堆样板代码。
use() Hook:异步数据的消费变得更直观。配合 Suspense,加载状态的处理干净了一大截。
编译器(React Compiler):虽然还在实验阶段,但它的方向是”让你不用再操心 useMemo 和 useCallback“。这对大型应用的性能优化是革命性的。
React 19 不是小修小补的版本,是 React 团队对过去五年社区痛点的集中回应。
团队因素
最后一条,也是最现实的一条:小团队更要借力招人市场。
这不是纯技术决策,也是人的决策。我们是个 3 人小组(含前端和测试),后续还要继续招人。迁到 React 19 之后,onboarding 新人的成本更低——市场上 React 工程师的数量是 Vue 的好几倍。
Vue 3 那条路意味着整个团队要重新学习 Composition API 的最佳实践、Pinia 的模式、新的 reactivity 心智模型。对一个需要持续扩招的小团队来说,React 这条路的招人面更宽。
我的判断
把上面的对比浓缩成一句话:在 2025 年 4 月这个时间点,对一个重交互的金融工具产品线,迁 React 19 是比升 Vue 3 更合理的选择。
我承认 Vue 3 是一个好框架。如果这是一个内容型网站、营销页面、或者中小型后台,Vue 3 完全够用甚至更舒服。但我们的场景——13 个重交互的数据工具、金融级别的类型严谨性要求、小团队需要更宽的招人市场——每一项都指向 React。
选型不是选”最好的框架”,是选”最适合当前场景的框架”。如果有人拿这篇文章去证明”React 比 Vue 好”,那是误读。我讲的是一个具体的业务决策,不是一个普适结论。
迁移策略
决策做了,怎么迁是下一个问题。13 个工具不可能一夜之间全换。我们的策略是:
- 新工具直接用 React 19 写——不再用 Vue 开新工具。
- 老工具按流量优先级逐步迁移——高频使用的先迁。
- 组件库双轨——Vue 版继续维护,React 版同步开发。两个版本共享设计 token 和样式。
- 微前端作为过渡——React 工具和 Vue 工具在同一个壳子里通过 module federation 共存。
这是决策时排的计划,照这个节奏走大概要 6-9 个月。但实际开干的时候,我用 Claude Code 做了个 UI 迁移 Agent,把 13 个工具并行着一起迁了,最后只花了一个半月——这是下一篇要讲的事。
给同样在纠结的人
如果你也在 Vue 和 React 之间纠结,我的建议是:
- 先看场景:内容型用 Vue,交互型用 React。
- 再看团队:团队熟什么就用什么,别逆着来。
- 最后看生态:你的场景需要哪些库,去查这些库在两个框架下的成熟度。
框架之争没有标准答案,但你的业务场景有。
这一篇是工具线前半段的结束,也是下半段的开始。下一篇讲我怎么用 Claude Code 做了个 UI 迁移 Agent,把计划的 6-9 个月压到一个半月。