首页 > 专栏 > 前端 > 文章详情
vue2 和 vue3 的区别? 发布于:2023-07-03 16:33:57   原创发表   查看:40  讨论:0

vue2和vue3的主要区别在于以下几点:xNL【易塔云】自习室

1、生命周期函数钩子不同xNL【易塔云】自习室

2、数据双向绑定原理不同xNL【易塔云】自习室

3、定义变量和方法不同xNL【易塔云】自习室

4、指令和插槽的使用不同xNL【易塔云】自习室

5、API类型不同xNL【易塔云】自习室

6、是否支持碎片xNL【易塔云】自习室

7、父子之间传参不同xNL【易塔云】自习室

8、main.js文件中部分设置不同xNL【易塔云】自习室
 xNL【易塔云】自习室

一、生命周期函数钩子不同xNL【易塔云】自习室

vue2 vue3
beforeCreate 组件创建之前xNL【易塔云】自习室
created 组件创建之后
setup 开始创建组件
beforeMount 组件挂载到页面之前执行 onBeforeMount 组件挂载到页面之前执行
mounted 组件挂载到页面之后执行 onMounted 组件挂载到页面之后执行
beforeUpdate 组件更新之前 onBeforeUpdate 组件更新之前
updated 组件更新之后 onUpdated 组件更新之后

注意:vue3.x生命周期在调用前 需要先引入。除上述的钩子函数外,还增加了onRenderTracked和onRenderTriggered。xNL【易塔云】自习室

xNL【易塔云】自习室
二、数据双向绑定原理不同xNL【易塔云】自习室

vue2 vue3
用ES5的API Object.defineProperty()xNL【易塔云】自习室
对数据进行劫持,xNL【易塔云】自习室
结合发布者订阅者模式的方式来实现的。
使用了ES6的Proxy API对数据代理。

vue3提供的proxy API代理的优势在于:xNL【易塔云】自习室

  • 1、defineProperty只能监听某个属性,不能对全对象监听
  • 2、可以省去for...in,闭包等内容来提升效率(直接绑定整个对象即可)
  • 3、可以监听数组,不再单独的对数组做特异性处理。可以检测到数组内部数据的变化。

xNL【易塔云】自习室
三、定义变量和方法不同xNL【易塔云】自习室

vue2 vue3
在data中定义变量,在methods中创建方法 使用一个新的setup方法

vue3提供的setup方法在组件初始化构造的时候触发,使用以下三个步骤建立反应性数据:xNL【易塔云】自习室

  • 1、从vue引入reactive
  • 2、使用reactive方法来声明数据为响应性数据
  • 3、使用setup方法返回响应性数据,从而template可以获取这些响应式数据。
  •  

四、指令和插槽的使用不同xNL【易塔云】自习室

vue2 vue3

不建议将v-for和v-if写在一起使用xNL【易塔云】自习室

允许直接使用slotxNL【易塔云】自习室

将v-if当作v-for大的一个判断语句,不会相互冲突xNL【易塔云】自习室

移除keyCode作为v-on的修饰符,不支持config.keyCodesxNL【易塔云】自习室

移除v-on.native修饰符xNL【易塔云】自习室
 xNL【易塔云】自习室

移除过滤器filterxNL【易塔云】自习室

不允许直接使用slot,正确格式为 v-slotxNL【易塔云】自习室

xNL【易塔云】自习室
五、API类型不同xNL【易塔云】自习室

vue2 vue3

选项型apixNL【易塔云】自习室

(在代码中分割不同属性:data,computed,methods等)xNL【易塔云】自习室

组合型apixNL【易塔云】自习室

(使用方法进行分隔,显得更加简便整洁)xNL【易塔云】自习室

六、是否支持碎片xNL【易塔云】自习室

vue2 vue3
是,即可以拥有多个根节点

七、父子之间传参不同xNL【易塔云】自习室

vue2 vue3

父传子:xNL【易塔云】自习室

子组件通过prop接收xNL【易塔云】自习室

子传父:xNL【易塔云】自习室

子组件中通过$emit向父组件触发一个监听方法,传递一个参数xNL【易塔云】自习室

使用setup()中的第二个参数content对象中有emit,只需要在setup()接收第二个参数中使用分解对象法取出emit就可以在setup方法中随意使用了。

xNL【易塔云】自习室
八、main.js文件不同xNL【易塔云】自习室

vue2 vue3
使用prototype(原型)的形式进行操作,引入的是构造函数 需要使用结构的形式进行操作,引入的是工厂函数;vue3中app组件中可以没用根标签

发表评论

  • 匿名
还没有注册?