响应式系统实现方式
Vue2 使用 Object.defineProperty 实现数据劫持,需递归遍历对象属性,无法检测新增/删除属性,需通过 Vue.set 或 Vue.delete 处理。
Vue3 改用 Proxy 代理整个对象,支持动态新增/删除属性,性能更高且无需特殊 API。
Composition API
Vue2 主要通过 Options API(如 data、methods)组织代码,逻辑分散。
Vue3 引入 Composition API(setup 函数),允许按功能聚合代码,支持更好的逻辑复用和 TypeScript 集成。
性能优化
Vue3 重写虚拟 DOM,优化 diff 算法,静态节点提升(Hoisting)减少渲染开销。
Vue3 支持 Tree-shaking,按需引入功能,减小打包体积。
生命周期变化
Vue3 生命周期钩子前缀改为 on(如 onMounted),与 Composition API 对齐。
移除 beforeCreate 和 created,其逻辑可在 setup 中直接执行。
片段与多根节点
Vue2 模板要求单根节点。
Vue3 支持多根节点(Fragment),减少不必要的包装元素。
TypeScript 支持
Vue3 源码使用 TypeScript 重写,提供更好的类型推断和开发体验。
Vue2 对 TypeScript 支持较弱,需额外配置。
其他差异
- Teleport :Vue3 新增
<Teleport>组件,便于控制 DOM 挂载位置。 - Suspense :Vue3 提供
<Suspense>处理异步组件加载状态。 - 自定义渲染器:Vue3 解耦核心模块,支持非 DOM 环境渲染(如小程序)。
迁移建议
- 新项目建议直接使用 Vue3。
- 现有 Vue2 项目可逐步迁移,利用
@vue/compat构建兼容版本。