Vue2和Vue3的区别
前言:这个也算老生常谈了,经常在面试中被问到的问题😂😂,其实基本上就是性能、Ts支持、响应式、优化等基本的区别吧
数据双向绑定原理
- Vue2使用的是Object.defineProperty()进行数据劫持,结合发布订阅的方式实现。
- Vue3使用的是Proxy代理,使用ref或者reactive将数据转化为响应式数据
使用proxy代理的优势
- defineProperty只能监听某个属性,不能对全对象监听
- 可以省去for in、闭包等内容来提升效率(直接绑定整个对象即可)
- 可以监听数组,不用再去单独的对数组做特异性操作,通过Proxy可以直接拦截所有对象类型数据的操作。
数据和方法的定义
Vue2使用的是选项类型API(Options API),Vue3使用的是合成型API(Composition API)
Vue2:
data() { return {}; }, methods:{ }
Vue3:
数据和方法都定义在setup中,并return出来,在vue3中this是undefined,所以在setup中不能用this
生命周期
vue2 | vue3 | 说明 |
---|---|---|
beforeCreate | setup() | 组件创建之前 |
created | setup() | 组件创建完成 |
beforeMount | onBeforeMount | 组件挂载之前 |
mounted | onMounted | 组件挂载完成 |
beforeUpdate | onBeforeUpdate | 数据更新,虚拟DOM打补丁之前 |
updated | onUpdated | 数据更新,虚拟DOM渲染完成 |
beforeDestroy | onBeforeUnmount | 组件销毁之前 |
destroyed | onUnmounted | 组件销毁后 |
activated | onActivated | |
deactivated | onDeactivated |
指令与插槽
- vue2中使用slot可以直接使用slot,而vue3中必须使用v-slot的形式
- v-for与v-if在vue2中优先级高的是v-for指令,vue3中v-if优先级更高
- vue3中移除keyCode作为v-on的修饰符,当然也不支持config.keyCodes
- vue3中移除v-on.native修饰符
- vue3中移除过滤器filter
- vue3在组件模板
<template/>
中,不需要跟根节点<div/>
,就是说在组件可以拥有多个根节点。
Composition API (组合API)
Vue2和Vue3最大的区别就是Vue3使用了Composition API (组合api)
Vue2:
1 | <script> |
Vue3:
1 | 这样代码会更加简洁和整洁。 |
全局API改动
2.x 全局 API | 3.x 实例 API (app ) |
---|---|
Vue.config | app.config |
Vue.config.productionTip | removed 已移除 |
Vue.config.ignoredElements | app.config.isCustomElement |
Vue.component | app.component |
Vue.directive | app.directive |
Vue.mixin | app.mixin |
Vue.use | app.use |
Vue.version | app.version |
Vue.filter | removed 已移除 |
Vue.prototype | app.config.globalProperties |
Vue.extend | removed 已移除 |
app
通过createApp
方法创建。
1 | import { createApp } from "vue"; |
总结
- vue经历从2.0到3.0更新之后,简而言之就是变得更轻,更快,有更好的TypeScript支持,使用起来更加方便
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 AliveSeven's Blog!
评论