一句话总纲#
React 是「函数式+数据驱动」,Vue 是「响应式+视图驱动」 一个靠重新渲染更新,一个靠精准劫持更新。
1. 数据响应式原理(最核心区别)#
React#
- 数据不可变(Immutable 思想)
- 状态更新必须用
setState/useState - 不会劫持数据,状态变了 → 重新执行组件函数 → 生成新 VDOM
- 靠 diff 对比 找到变化
Vue#
- 数据响应式劫持
- Vue2:
Object.defineProperty - Vue3:
Proxy - 自动追踪依赖,数据变了 → 精确通知对应组件/节点更新
- 不需要手动 setState,直接修改数据
口诀: React 是暴力重渲染,Vue 是精准点对点更新。
2. 模板与渲染写法#
React#
- JSX 一统天下(JS + HTML 混合)
- 一切都是 JS,循环用
map,条件用if/&& - 灵活度极高,贴近原生 JS
Vue#
- 模板(template)+ 脚本(script)分离
- 内置指令:
v-if/v-for/v-model - 上手更简单,对新手友好
口诀: React All in JS,Vue 模板更直观。
3. 组件更新机制#
React#
- 自动重新渲染:父组件更新 → 子组件默认全部跟着更新
- 需要手动优化:
React.memo/useMemo/useCallback - 渲染量大 → 所以需要 Fiber 架构
Vue#
- 组件自动追踪依赖
- 数据变 → 只更新用到这个数据的组件
- 组件更新默认优化好,基本不需要手动优化
- 渲染量极小 → 不需要 Fiber
口诀: React 需要手动优化,Vue 自带优化躺平用。
4. 设计哲学与生态#
React#
- 函数式编程(FP)
- 专注 UI 层,路由、状态管理靠社区(React Router / Redux / Zustand)
- 自由度极高,适合大型项目、团队定制
Vue#
- 渐进式框架
- 全家桶一站式(Vue Router / Pinia 官方内置)
- 开箱即用,约束更强,开发效率高
- 更适合中后台、快速开发
总结#
- 响应式不同:React 靠 setState 重新渲染,Vue 靠 Proxy 自动劫持精准更新。
- 渲染机制不同:React 父更新子必更新,需要手动优化;Vue 自动追踪依赖,自带优化。
- 写法不同:React 用 JSX,一切皆 JS;Vue 用模板 + 指令,更易上手。
- 架构不同:React 渲染量大,需要 Fiber 防止卡顿;Vue 更新精准,不需要 Fiber。
- React:灵活、函数式、全靠 JS、需要手动优化、有 Fiber
- Vue:简单、响应式、模板友好、自动优化、无需 Fiber