当前位置: 首页 > news >正文

vue2和vue3区别

vue2和vue3的区别有以下8点:

1、双向数据绑定原理不同;
2、是否支持碎片;
3、API类型不同;
4、定义数据变量和方法不同;
5、生命周期钩子函数不同;
6、父子传参不同;
7、指令与插槽不同;
8、main.js文件不同。

1、双向数据绑定原理不同

vue2:vue2的双向数据绑定是利用ES5的一个APIObject.definePropert() 对数据进行劫持,结合发布订阅模式的方式来实现的。

vue3:vue3中使用了ES6的Proxy API对数据代理。相比vue2.x,使用proxy的优势如下:
defineProperty只能监听某个属性,不能对全对象监听
可以省去for in,闭包等内容来提升效率(直接绑定整个对象即可)
可以监听数组,不用再去单独的对数组做特异性操作vue3.x可以检测到数组内部数据的变化。

2、是否支持碎片

vue2:vue2不支持碎片。

vue3:vue3支持碎片(Fragments),就是说可以拥有多个根节点。

3、API类型不同

vue2:vue2使用选项类型api,选项型api在代码里分割了不同的属性:data,computed,methods等。

vue3:vue3使用合成型api,新的合成型api能让我们使用方法来分割,相比于旧的api使用属性来分组,这样代码会更加简便和整洁。

4、定义数据变量和方法不同

vue2:vue2是把数据放入data中,在vue2中定义数据变量是data(){},创建的方法要在methods:{}中。

vue3:,vue3就需要使用一个新的setup()方法,此方法在组件初始化构造的时候触发。使用以下三个步骤来建立反应性数据:

(1) 从vue引入reactive;
(2) 使用reactive() 方法来声明数据为响应性数据;
(3) 使用setup()方法来返回我们的响应性数据,从而template可以获取这些响应性数据。

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

vue2:vue2中的生命周期:

beforeCreate 组件创建之前
created 组件创建之后
beforeMount 组价挂载到页面之前执行
mounted 组件挂载到页面之后执行
beforeUpdate 组件更新之前
updated 组件更新之后

vue3:vue3中的生命周期:

setup 开始创建组件
onBeforeMount 组价挂载到页面之前执行
onMounted 组件挂载到页面之后执行
onBeforeUpdate 组件更新之前
onUpdated 组件更新之后

而且vue3.x 生命周期在调用前需要先进行引入。除了这些钩子函数外,vue3.x还增加了onRenderTracked 和onRenderTriggered函数。

6、父子传参不同

vue2:父传子,用props,子传父用事件 Emitting Events。在vue2中,会调用this$emit然后传入事件名和对象。

vue3:父传子,用props,子传父用事件 Emitting Events。在vue3中的setup()中的第二个参数content对象中就有emit,那么我们只要在setup()接收第二个参数中使用分解对象法取出emit就可以在setup方法中随意使用了。

7、指令与插槽不同

vue2:vue2中使用slot可以直接使用slot;v-for与v-if在vue2中优先级高的是v-for指令,而且不建议一起使用。

vue3:vue3中必须使用v-slot的形式;vue3中v-for与v-if,只会把当前v-if当做v-for中的一个判断语句,不会相互冲突;vue3中移除keyCode作为v-on的修饰符,当然也不支持config.keyCodes;vue3中移除v-on.native修饰符;vue3中移除过滤器filter。

8、main.js文件不同

vue2:vue2中我们可以使用pototype(原型)的形式去进行操作,引入的是构造函数。

vue3:vue3中需要使用结构的形式进行操作,引入的是工厂函数;vue3中app组件中可以没有根标签。

setup()函数特性

1、setup()函数接收两个参数:props、context(包含attrs、slots、emit)。

2、setup函数是处于生命周期beforeCreated和created俩个钩子函数之前。

3、执行setup时,组件实例尚未被创建(在setup()内部,this不会是该活跃实例得引用,即不指向vue实例,Vue为了避免我们错误得使用,直接将setup函数中得this修改成了undefined)。

4、与模板一起使用时,需要返回一个对象。

5、因为setup函数中,props是响应式得,当传入新的prop时,它将会被更新,所以不能使用es6解构,因为它会消除prop得响应性,如需解构prop,可以通过使用setup函数中得toRefs来完成此操作。

6、在setup()内使用响应式数据时,需要通过 .value 获取。

7、从setup() 中返回得对象上得property 返回并可以在模板中被访问时,它将自动展开为内部值。不需要在模板中追加.value。

8、setup函数只能是同步的不能是异步的。

http://www.lryc.cn/news/112981.html

相关文章:

  • IMV3.0
  • 怎么在树莓派环境上搭建web网站,并发布到外网可访问,今天教给大家
  • 大文件传输软件| 生命科学中的关键因素
  • varint编码实现原理
  • 如果新电脑是刚安装的mysql,但是旧电脑迁移过来的文件里面有相关的rails文件,运行rake db:migrate一直报错
  • ChatGPT已闯入学术界,Elsevier推出AI工具
  • 深度学习论文: RepViT: Revisiting Mobile CNN From ViT Perspective及其PyTorch实现
  • R语言3_安装SeurateData
  • 详解Gillespie算法:使用Python构建分子化学模拟及其在随机多智能体动力学中的应用
  • Unity数字可视化学校_昼夜(三)
  • 使用罗技鼠标后 弹出当前页面的脚本发生错误AppData/Local/Temp/LogiUI/Pak/js/jquery-1.3.2.min.js解决
  • Kubernetes(K8s)从入门到精通系列之十四:安装工具
  • 【Python】Python元组学习
  • HTML 元素的属性有哪些?
  • Spring之事务实现方式及原理
  • 为独立服务器增加安全性的简单步骤
  • JavaScript--Cookie
  • 【单片机】晨启科技,酷黑版,简易电压采集装置
  • 任务12、Quality指令加持,Midjourney生成电影级数码作品
  • 第4章 字符串和格式化输入/输出
  • 嵌入式开发学习(STC51-7-矩阵按键)
  • WMS仓储管理系统的价值从哪些方面体现
  • 网站推荐第二期-沉浸式网页翻译
  • 【独立后台】快递小程序便宜寄快递系统小程序 对接易达
  • 【JVM】垃圾回收 ——自问自答2
  • MySQL数据库数据类型
  • 【力扣】27. 移除元素 <快慢指针、首尾指针>
  • 【每日一题】—— C. Challenging Cliffs(Codeforces Round 726 (Div. 2))
  • 想在金融界拥有一席之地吗—社科院杜兰大学金融管理硕士助你圆梦
  • Moonbeam与Nodle网络集成,增添物联网功能