这一篇可能会得罪一些 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@3vuex@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
2
3
4
5
6
7
8
9
10
11
// React 里一个 props 类型的定义,干净利落
interface AmountInputProps {
value: number;
onChange: (value: number) => void;
max?: number;
currency?: 'CNY' | 'USD';
}

function AmountInput({ value, onChange, max, currency = 'CNY' }: AmountInputProps) {
// ...
}

Vue 那边要达到同样的类型体验,需要 defineProps + 泛型 + macros 的组合,心智负担更重。

React 19 的吸引力

React 19 在 2024 年 12 月正式发布。到 2025 年 4 月我们做决策时,它已经稳定了 4 个月,社区反馈很充分。几个点让我特别心动:

Server Components:虽然我们暂时用不上 RSC,但 React 19 的架构方向让”按需加载”变成了框架级别的能力。

Actions 和 useFormStatus:表单提交的状态管理终于不用自己造轮子了。金融工具里有大量表单,这个特性直接干掉了一大堆样板代码。

use() Hook:异步数据的消费变得更直观。配合 Suspense,加载状态的处理干净了一大截。

编译器(React Compiler):虽然还在实验阶段,但它的方向是”让你不用再操心 useMemouseCallback“。这对大型应用的性能优化是革命性的。

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 个工具不可能一夜之间全换。我们的策略是:

  1. 新工具直接用 React 19 写——不再用 Vue 开新工具。
  2. 老工具按流量优先级逐步迁移——高频使用的先迁。
  3. 组件库双轨——Vue 版继续维护,React 版同步开发。两个版本共享设计 token 和样式。
  4. 微前端作为过渡——React 工具和 Vue 工具在同一个壳子里通过 module federation 共存。

这是决策时排的计划,照这个节奏走大概要 6-9 个月。但实际开干的时候,我用 Claude Code 做了个 UI 迁移 Agent,把 13 个工具并行着一起迁了,最后只花了一个半月——这是下一篇要讲的事。

给同样在纠结的人

如果你也在 Vue 和 React 之间纠结,我的建议是:

  • 先看场景:内容型用 Vue,交互型用 React。
  • 再看团队:团队熟什么就用什么,别逆着来。
  • 最后看生态:你的场景需要哪些库,去查这些库在两个框架下的成熟度。

框架之争没有标准答案,但你的业务场景有。

这一篇是工具线前半段的结束,也是下半段的开始。下一篇讲我怎么用 Claude Code 做了个 UI 迁移 Agent,把计划的 6-9 个月压到一个半月。