写了 7 年 Vue,我开始认真用 React

简历上 React 那一栏我写了好几年"熟练运用",但心里清楚——那不叫熟练,那叫"看得懂"。

过去七年:外企咨询的 Vue2、网络安全公司的 Vue2 全家桶、半导体公司的 Vue3 + 无界微前端、互联网车企的 Vue3 + TS。React 只在 Yapi 改造里摸过几个月。

所以今年决定补上。写这个博客就是第一步。

语法不是障碍,心智模型才是

Vue 的 SFC 给了很多"默认正确"的东西:ref 自动解包、v-model 双向绑定、computed 自动缓存。写起来快,代价是你不太需要思考数据流。

React 把这些全拿走了。第一次写会觉得啰嗦——为什么 useState 要手动 setState,为什么 useMemo 要自己写依赖数组。

但写着写着会意识到:这些啰嗦的地方,正是 Vue 替你做了决定、而你可能没意识到的地方。

三个具体的差异

1. 依赖数组逼你想清楚"什么时候重算"

Vue 的 computed 自动追踪依赖,很爽,但也导致我见过太多把整个大对象塞进 computed、然后一次小改动触发重算的代码——因为太方便,没人去想粒度。

React 的 useMemo(fn, deps) 强制你写出依赖。写得出来说明你想清楚了,写不出来说明这个 memo 本来就不该加。

2. 单向数据流不是限制,是可预测性

Vue 有 v-model,父子组件双向同步很方便。但项目一大,"这个值到底是谁改的"就变成噩梦。React 禁止你这么做——数据只能从上往下,改只能走回调。少了自由,多了可追溯。

3. Server Component 是 React 独有的牌

这是我这次真正被打动的地方。写这个博客时,Markdown 解析 + 代码高亮那一整套(unified + Shiki,好几百 KB 的语法定义)全部跑在构建时,浏览器拿到的已经是 HTML。

Vue 生态里没有对等物。Nuxt 的 SSR 还是要把组件送到浏览器 hydrate,而 RSC 是真的不发货。

一个诚实的结论

我不会说 React 比 Vue 好。写后台管理系统、写表单密集的中台,Vue 的 SFC 效率仍然更高,这是事实。

但它们解决的问题不一样:Vue 优化的是"写得快",React 优化的是"改得动"。 项目生命周期超过两年、参与人数超过五个,后者更重要。

我现在能两边都写,这比只会一边值钱。

← 返回