React和Vue的区别
Vue 和 React 最核心的不同点之一:底层实现机制的差异。
这确实是理解两者本质区别的关键,虽然它们都用组件来构建 UI,但内部工作方式完全不同。下面详细解释一下:
🔍 React:Virtual DOM + Diff 算法
👉 原理
React 本质上是「状态驱动 UI 的声明式框架」,当组件的 state 或 props 发生变化时,React 会:
- 重新执行 render 函数(对函数组件来说就是重新调用组件函数);
- 生成新的 Virtual DOM(虚拟 DOM 是 React 自己构建的一棵 JavaScript 对象树,描述 UI);
- 比较新旧 Virtual DOM 的差异(也就是 diff 算法);
- 计算出最小的 DOM 操作,最终更新真实的 DOM。
✅ 特点:
- 每次更新都重新渲染整棵组件的虚拟 DOM 树;
- 通过 diff 算法优化性能,避免不必要的 DOM 操作;
- UI 的更新是「重新构建再比对」的过程;
- 数据不是响应式的,只是每次改变 state 后触发重新渲染。
🟢 Vue:响应式系统 + 精确更新 DOM
👉 原理
Vue 是一个「基于响应式的视图系统」,当你定义一个数据对象时,Vue 会使用 Proxy 或 Object.defineProperty(Vue 2)进行劫持,把这些属性变成响应式的。
响应式的核心机制:
- 响应式数据被“劫持”,在你修改数据的时候,Vue 会知道具体是哪个数据变了;
- 模板中使用的数据会建立依赖关系(依赖追踪),比如哪个组件用了哪个数据;
- 当数据变化时,只会精确更新那些依赖了这个数据的地方;
- 不需要重新执行整个组件函数或重新构建整棵 DOM 树。
✅ 特点:
- 数据变了,Vue 会“精确追踪”哪些地方用了这个数据;
- 只更新真正需要更新的 DOM;
- 更新效率高,依赖管理由 Vue 的响应式系统自动完成;
- 是“数据驱动视图 + 自动依赖追踪 + 局部更新”的方式。
🔬 对比图示(类比):
| 项目 | React | Vue |
|---|---|---|
| 数据更新机制 | 重新执行 render,生成新虚拟 DOM | 精确追踪哪个数据变了,局部更新 |
| DOM 更新方式 | Virtual DOM diff 后统一更新 | 精准 DOM 更新 |
| 性能优化 | 依赖 diff 算法和 shouldComponentUpdate / memo | 基于响应式追踪,自动优化更新 |
| 响应式能力 | 不响应式(需显式触发 setState) | 内建响应式系统(ref/reactive) |
| 概念核心 | Virtual DOM、Hooks | 响应式、依赖收集、模板绑定 |
✅ 举个例子来对比感受:
1 | // React |
在 React 中,每次点击都会执行整个组件函数;而 Vue 中,只会响应式更新用到 count 的地方。
📌 总结一句话:
React:变了 -> 重新渲染(靠 diff 算法优化)
Vue:变了 -> 精确知道谁变了,只更新那部分(靠响应式系统)
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !