贵州桥梁
46.13M · 2026-03-22
从 Vue 2 到 Vue 3,不仅仅是版本的跳跃,更是底层思想的革新。从 Object.defineProperty 到 Proxy,从 Options API 到 Composition API,Vue 3 在性能和开发体验上都实现了质的飞跃。本文将带你系统梳理两者的核心区别。
响应式系统的升级是 Vue 3 性能提升的关键。
原理:初始化时通过递归遍历 data,为每个属性设置 getter 和 setter。
局限性:
length 属性。this.$set 等特有 API 来弥补。原理:直接整个代理对象,拦截所有操作(如 get, set, deleteProperty, has 等)。
优势:
代码组织方式的改变直接影响了大型项目的维护成本。
data、methods、computed 等固定选项中。当一个组件功能复杂时,同一个功能的代码会散落在各处,导致开发者反复上下滚动查找,难以维护。优势:通过 <script setup>,开发者可以按照功能逻辑将代码组织在一起。
逻辑复用:可以轻松地将逻辑抽离成独立的 useHooks 函数,解决了 Vue 2 中 mixin 命名冲突和来源不明的问题。
.value 访问(模板中自动解包)。.value。在 Vue 3.4+ 中引入的 defineModel 极大地简化了父子组件通信:
props 接收值 + this.$emit('update:xxx') 触发更新。const model = defineModel(),修改 model 的值会自动同步到父组件,代码量骤减。<div>),否则报错。<Suspense>default 和 fallback 两个插槽,可以优雅地展示“加载中”和“加载完成”的 UI 切换。| 类别 | Vue2 | Vue3 |
|---|---|---|
| 响应式原理 | Object.defineProperty 逐个属性劫持 | Proxy 代理整个对象,懒加载 |
| 编写模式 | 选项式API(Options API) | 组合式API(Composition API + |
| 模板规范 | 仅支持单个根节点 | 支持多个根节点 |
| 数据 | 无法对象增删、数组索引 | 原生支持对象增删、数组下标修改 |
| 组件双向绑定 | props + emit 手动实现 | defineModel 语法糖简化 |
| 异步加载 | 手动处理加载状态 | 内置 Suspense 组件 |