Skip to content

前端框架对比

React / Vue3 / Angular 核心差异速查 基于 W1 D1~D3 实战沉淀

设计哲学

维度ReactVue3Angular
范式函数式 + 不可变响应式 + 可变响应式 + DI
类型TS 推荐TS 推荐TS 必选
模板JSXSFC 模板 + JSXHTML 模板
组件模型函数组件SFC (script setup)Class + 函数 (17+ 也支持函数)
状态管理Hooks + Contextref/reactive + PiniaSignals + RxJS
DI无(手动 props)无(provide/inject)内置 DI 容器
模块化ES modulesES modulesNgModule / Standalone (17+)

响应式原理

ReactVue3Angular
机制Fiber 链表 + 不可变引用对比Proxy 代理对象,拦截 get/setZone.js 拦截异步 + Signal
数据修改不可变,必须返回新引用可变,直接改属性不可变(Signal 自动检测)
依赖追踪手动 deps 数组自动(effect 系统)Signal 自动 / Zone.js 全量
闭包陷阱常见(过期闭包)不存在不存在(Signal + effect)

React 的 useState → 返回 [value, setter],必须用 setter 传新值。 Vue3 的 ref → 返回响应式对象,直接改 .value。 Angular 的 signal → 返回 getter 函数,.set() / .update() 更新。

渲染机制

ReactVue3Angular
虚拟 DOM全量创建 + 全量 diff只创建动态节点(PatchFlags)无虚拟 DOM(模板编译直接操作 DOM)
编译优化几乎没有(JSX 全动态)静态提升 + Block Tree + PatchFlagsAOT 编译,模板直接生成指令
优化手段memo / useCallback / useMemo默认已优化OnPush 策略 + trackBy
渲染触发整个组件重渲染 → diff精确到动态节点Zone.js 拦截异步 → 全树检查
diff 算法右端优先(React 16+)双端 diff无(无虚拟 DOM)

性能优化策略

场景ReactVue3Angular
避免子组件重渲染React.memo + useCallback默认跳过OnPush 策略
派生状态缓存useMemocomputedcomputed (Signal)
大列表优化key + 虚拟滚动:key + 虚拟滚动track (@for) + 虚拟滚动
条件渲染{cond && <A/>}v-if / v-show@if / @else
避免闭包陷阱useCallback + deps不存在不存在

开发体验

ReactVue3Angular
TS 集成泛型组件需额外工作defineProps<{}>() 原生支持强制 TS,原生支持最完善
双向绑定手动 value + onChangev-model / defineModel[(ngModel)] / model()
表单处理受控 / 非受控v-modelFormsModule / ReactiveForms
子传父回调 propsemitoutput()
插槽{children} / render props<slot><ng-content>
样式className / CSS-in-JS<style scoped>[class.active] / :host
HTTPfetch / axiosfetch / axiosHttpClient(内置)
路由React RouterVue RouterRouter(内置)

变更检测对比

Angular: Zone.js 拦截 setTimeout/Promise/事件 → 全树检查
         ↓ OnPush 缩到只检查当前组件(类似 React.memo)
         ↓ Signal 精确到消费者

React:   setState → 当前组件 + 整个子树递归 diff
         ↓ memo/useCallback 控制子组件跳不跳过

Vue3:    ref.value = x → 精确到动态节点
         ↓ 不需要任何手动优化

编译策略

ReactVue3Angular
编译时机运行时构建时 + 运行时AOT 编译(构建时)
模板JSX = JSSFC 模板HTML 模板
产物createElement 调用带 PatchFlags 的 render 函数直接操作 DOM 的指令
优化空间小(JSX 全动态)大(模板可静态分析)大(AOT + 模板)
Angular 没有虚拟 DOM:模板编译成直接操作 DOM 的指令
Vue3 有虚拟 DOM:但编译优化了动态节点追踪
React 有虚拟 DOM:全量 diff,靠 Fiber 分片缓解

何时用什么

场景推荐框架
大型企业应用Angular(结构化/类型安全/内置齐全)
快速迭代 + 灵活React(生态最大/社区最活跃)
中小型 + 快速上手Vue3(学习曲线最低/渐进式)
全栈 SSRNext.js (React) / Nuxt (Vue3) / Angular Universal
跨端移动RN (React) / uni-app (Vue)
微前端三者均可(MF / qiankun)