vue2和vue3的不同

目录

1、生命周期函数钩子不同

vue2中的生命周期

vue3中的生命周期

2、数据双向绑定(响应式)原理不同

vue2中的响应式

vue3中的响应式

3、定义变量和方法不同

vue2的定义方法

vue3中的定义方法

4、插槽的使用不同

vue2中插槽

vue3中插槽


1、生命周期函数钩子不同

vue2中的生命周期

beforeCreate——  创建之前
created ————   创建之后
beforeMount ——  挂载之前
mounted ———— 挂载之后
beforeUpdate——  更新之前
updated ————   更新之后

vue3中的生命周期

setup ——————   创建
onBeforeMount —— 挂载之前
onMounted ———— 挂载之后
onBeforeUpdate ——更新之前
onUpdated ————  更新之后

2、数据双向绑定(响应式)原理不同

vue2中的响应式

核心是通过ES5的Object.defineProperty中的访问器属性中的 get 和 set 方法,data 中声明的属性都被添加了访问器属性,当读取 data 中的数据时自动调用 get 方法,当修改 data 中的数据时,自动调用 set 方法,检测到数据的变化,会通知观察者 Watcher,观察者 Watcher自动触发重新render 当前组件(子组件不会重新渲染),生成新的虚拟 DOM 树,Vue 框架会遍历并对比新虚拟 DOM 树和旧虚拟DOM树中每个节点的差别并记录下来,最后加载操作,将所有记录的不同点局部修改到真实 DOM 树上。

缺点:Object.defineProperty需要深度遍历data中的每个属性,这种方式对于数组很不友好,而且对象观测后,新增的属性就不是响应式的,不过可以用Vue.set()来添加新的属性;

vue3中的响应式

通过使用 ES6 的 Proxy 对象来实现,当一个组件被创建时,Vue 会为组件的 data 对象创建一个响应式代理对象。这个代理对象可以监听到数据的变化,并在数据变化时更新视图。当组件的 data 对象发生变化时,代理对象会收到变化通知,然后将变化传递给相关的组件和子组件,从而触发组件的重新渲染。

使用Proxy,Proxy可以劫持整个data对象,然后递归返回属性的值的代理即可实现响应式;代理对象和反射对象要相互配合来实现响应式。

3、定义变量和方法不同

vue2的定义方法

定义数据变量是data(){ },创建的方法要在methods:{}中,选项式API。

但其实在企业的项目中都是vue2结合ts,都是直接定义变量和函数,组合式API。

vue3中的定义方法

直接在setup(){ }中,在这里面定义的变量和方法因为最终要在模板中使用,所以最后都得return。如果没有return该变量,是无法使用的。

4、插槽的使用不同

vue2中插槽

具名插槽是slot=" ",作用域插槽是slot-scope="data"

vue3中插槽

具名插槽是v-slot=" ",作用域插槽是#data或者#default="{data}"

5.其他区别

1.v-if和v-for的优先级不同

在vue2中v-for的优先级高于v-if,可以放在一起使用。

在vue3中v-if的优先级高于v-for,一起使用会报错。

2.根节点不同

vue2必须要有根标签。

vue3可以没有根标签,会默认将多个根标签包裹在一个fragement虚拟标签中,有利于减少内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值