首页 > 其他分享 >vue2和vue3的区别有哪些?

vue2和vue3的区别有哪些?

时间:2023-02-09 14:44:21浏览次数:57  
标签:Vue vue2 哪些 vue3 API Vue2 Vue3 组件 Composition

一、Vue3 与 Vue2 区别详述

1. 生命周期

对于生命周期来说,整体上变化不大,只是大部分生命周期钩子名称上 + “on”,功能上是类似的。不过有一点需要注意,Vue3 在组合式API(Composition API,下面展开)中使用生命周期钩子时需要先引入,而 Vue2 在选项API(Options API)中可以直接调用生命周期钩子,如下所示。

 

Tips: setup 是围绕 beforeCreate 和 created 生命周期钩子运行的,所以不需要显式地去定义。

2. 多根节点

 

Vue3 支持多个根节点,也就是 fragment。即以下多根节点的写法是被允许的。

3. Composition API

Vue2 是选项API(Options API),一个逻辑会散乱在文件不同位置(data、props、computed、watch、生命周期钩子等),导致代码的可读性变差。当需要修改某个逻辑时,需要上下来回跳转文件位置。

Vue3 组合式API(Composition API)则很好地解决了这个问题,可将同一逻辑的内容写到一起,增强了代码的可读性、内聚性,其还提供了较为完美的逻辑复用性方案。

4. 异步组件(Suspense)

Vue3 提供 Suspense 组件,允许程序在等待异步组件加载完成前渲染兜底的内容,如 loading ,使用户的体验更平滑。使用它,需在模板中声明,并包括两个命名插槽:default 和 fallback。Suspense 确保加载完异步内容时显示默认插槽,并将 fallback 插槽用作加载状态。参考 前端进阶面试题详细解答

5. Teleport

Vue3 提供 Teleport 组件可将部分 DOM 移动到 Vue app 之外的位置。比如项目中常见的 Dialog 弹窗。

6. 响应式原理

Vue2 响应式原理基础是 Object.defineProperty;Vue3 响应式原理基础是 Proxy。

  • Object.defineProperty 基本用法:直接在一个对象上定义新的属性或修改现有的属性,并返回对象。

 

 Tips: writable 和 value 与 getter 和 setter 不共存。

 

搬运 Vue2 核心源码,略删减。

 

 

Vue2 相应解决方案:针对常用数组原型方法push、pop、shift、unshift、splice、sort、reverse进行了hack处理;提供Vue.set监听对象/数组新增属性。对象的新增/删除响应,还可以new个新对象,新增则合并新属性和旧对象;删除则将删除属性后的对象深拷贝给新对象。

  • Proxy Proxy 是 ES6 新特性,通过第2个参数 handler 拦截目标对象的行为。相较于 Object.defineProperty 提供语言全范围的响应能力,消除了局限性。

局限性:

(1)、对象/数组的新增、删除

(2)、监测 .length 修改

(3)、Map、Set、WeakMap、WeakSet 的支持

基本用法:创建对象的代理,从而实现基本操作的拦截和自定义操作。
  搬运 vue3 的源码 reactive.ts 文件。

7. 虚拟DOM

Vue3 相比于 Vue2,虚拟DOM上增加 patchFlag 字段。我们借助Vue3 Template Explorer来看。

 

 字段类型情况:1 代表节点为动态文本节点,那在 diff 过程中,只需比对文本对容,无需关注 class、style等。除此之外,发现所有的静态节点(HOISTED 为 -1),都保存为一个变量进行静态提升,可在重新渲染时直接引用,无需重新创建。

8. 事件缓存

Vue3 的cacheHandler可在第一次渲染后缓存我们的事件。相比于 Vue2 无需每次渲染都传递一个新函数。加一个 click 事件。

9. Diff算法优化

10. 打包优化

Tree-shaking:模块打包 webpack、rollup 等中的概念。移除 JavaScript 上下文中未引用的代码。主要依赖于 import 和 export 语句,用来检测代码模块是否被导出、导入,且被 JavaScript 文件使用。

以 nextTick 为例子,在 Vue2 中,全局API暴露在Vue实例上,即使未使用,也无法通过 tree-shaking 进行消除。

Vue3 中针对全局和内部的API进行了重构,并考虑到 tree-shaking 的支持。因此,全局API现在只能作为ES模块构建的命名导出进行访问。

通过这一更改,只要模块绑定器支持 tree-shaking,则Vue应用程序中未使用的 api 将从最终的捆绑包中消除,获得最佳文件大小。

受此更改影响的全局API如下所示。

  • Vue.nextTick
  • Vue.observable (用 Vue.reactive 替换)
  • Vue.version
  • Vue.compile (仅全构建)
  • Vue.set (仅兼容构建)
  • Vue.delete (仅兼容构建)

内部API也有诸如 transition、v-model 等标签或者指令被命名导出。只有在程序真正使用才会被捆绑打包。Vue3 将所有运行功能打包也只有约22.5kb,比 Vue2 轻量很多。

11. TypeScript支持

Vue3 由 TypeScript 重写,相对于 Vue2 有更好的 TypeScript 支持。

  • Vue2 Options API 中 option 是个简单对象,而 TypeScript 是一种类型系统,面向对象的语法,不是特别匹配。

  • Vue2 需要vue-class-component强化vue原生组件,也需要vue-property-decorator增加更多结合Vue特性的装饰器,写法比较繁琐。

二、Options API 与 Composition API

Vue 组件可以用两种不同的 API 风格编写:Options API 和 Composition API。

1. Options API

使用 Options API,我们使用选项对象定义组件的逻辑,例如data、methods和mounted。由选项定义的属性在 this 内部函数中公开,指向组件实例,如下所示。

2. Composition API

使用 Composition API,我们使用导入的 API 函数定义组件的逻辑。在 SFC 中,Composition API 通常使用

 

 

 

标签:Vue,vue2,哪些,vue3,API,Vue2,Vue3,组件,Composition
From: https://www.cnblogs.com/lmj9911/p/17105191.html

相关文章

  • 关于小游戏引擎你还了解哪些?
      有哪些小游戏引擎?目前,市场上的H5游戏引擎有很多,很难直接去一分高下。每个引擎都有自己的特性与优势,适用的场景自然也有所不同。对于专注于小游戏公司,使用最多的......
  • JavaScript闭包有哪些表现形式?
    在真实的场景中,究竟在哪些地方能体现闭包的存在?1.返回一个函数functionf1(){vara=2;returnfunctionf2(){console.log(a);//2};};varnum=f1();num()......
  • 什么是BFC?它的触发条件有哪些?
    1.什么是BFC?BlockFromattingContext,即块级格式上下文。W3C对BFC的定义如下:浮动元素和绝对定位元素,非块级盒子的块级容器,以及overflow值不为"visiable"的块级盒子,都会......
  • CSS中BFC的渲染规则有哪些?有哪些应用场景?
    1.BFC渲染规则1. BFC垂直方向边距重叠;2. BFC的区域不会与浮动元素的box重叠;3.BFC是一个独立的容器,外面的元素不会影响里面的元素;4. 计算BFC高度的时候浮动元素也会参......
  • 浮动布局有哪些优点?有什么缺点?清除浮动有哪些方式?
    浮动布局简介:当元素浮动以后可以向左或向右移动,直到它的外边缘碰到包含它的框或者另外一个浮动元素的边框为止。元素浮动以后会脱离正常的文档流,所以文档的普通流中的框就变......
  • 让元素垂直居中的方法有哪些?
     如何让元素垂直居中?这是一道很常见的面试题,大致有以下5种:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"con......
  • 让元素水平居中的方法有哪些?
     如何让元素水平居中?这是一道很常见的面试题,对于已知宽度和未知宽度的处理方法又有所不同,大致有以下7种:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......
  • Vue2.9.6安装element-ui
    阅读目录安装element-ui源码路由文件:E:\node\vue296\src\router\index.js入口:E:\node\vue296\src\main.js组件:E:\node\vue296\src\components\Count.vue......
  • 地图用得好,数据更直观!bi软件都有哪些地图图表?
    地图图表的使用频率有多高?每次做分析报告十有八九都要用到它。但不同情况下所需的地图图表往往不同,这就要求bi数据可视化软件能够提供更加多多样化的地图图表。bi数据可视化......
  • 互联网医院开发|搭建互联网医院需要具备哪些资质
    很多的企业想搭建互联网医院平台,但是搭建互联网医院平台是需要资质的,这种移动医疗平台也不是随便就能开办的,毕竟也同属医疗行业,大家也都知道医疗行业的门槛也是比较高的......