Vue-vue3

  • 一、Vue3简介
  • 二、Vue3有那些优化
    • 性能的提升
    • 源码升级
    • 拥抱TypeScript
    • 新的特性
  • 三、创建Vue3.0工程
  • 四、Vue3工程结构(使用cli创建的vue3)
  • 五、常用的Composition API(组合式API)
    • setup
      • setup的两个注意点
    • ref函数
    • reactive函数
    • Vue3.0中的响应式原理
      • vue2.x的响应式
      • Vue3.0的响应式
    • reactive对比 ref
    • 计算属性与监视
      • computed函数
      • watch函数
      • watchEffect函数
    • 自定义hook函数
    • toRef(重点)
  • 六、其他Composition API
    • shallowReactive与shallowRef
    • readonly与shallowReadonly
    • toRaw与markRaw
    • customRef
    • provide与inject
    • 响应式数据的判断
  • 七、Composition API 的优势
    • options API 存在的问题
    • Composition API 的优势
  • 八、新的组件
    • Fragment
    • Teleport
  • 九、其他
    • 全局API的转移
    • 其他改变


一、Vue3简介

  • 2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)
  • 耗时2年多、2600+次提交、30+个RFC、600+次PR、99位贡献者
  • github上的tags地址:https://github.com/vuejs/vue-next/releases/tag/v3.0.0

二、Vue3有那些优化

性能的提升

  • 打包大小减少41%
  • 初次渲染快55%,更新渲染快133%
  • 内存减少54%

源码升级

  • 使用Proxy代替defineProperty实现响应式
  • 重写虚拟DOM的实现和Tree-Shaking

拥抱TypeScript

  • Vue3可以更好的支持TypeScript

新的特性

  • Composition API(组合API)
    • setup配置
    • ref与reactive
    • watch与watchEffect
  • 新的内置组件
    • Fragment
    • Teleport
    • Suspense
  • 其他改变
    • 新的生命周期钩子
    • data 选项应始终被声明为一个函数
    • 移除keyCode支持作为 v-on 的修饰符

三、创建Vue3.0工程

  1. 使用vue-cli创建
    在这里插入图片描述
    选择第二个
    在这里插入图片描述

  2. 使用vite创建
    官方地址:https://v3.cn.vuejs.org/guide/installation.html#vite
    什么是vite?-------新一代的前端构建工具

## 创建工程
npm init vite-app <project-name>
##进入工程目录
cd <project-name>
## 安装依赖
npm install
## 运行
npm run dev

四、Vue3工程结构(使用cli创建的vue3)

在这里插入图片描述
在这里插入图片描述

五、常用的Composition API(组合式API)

setup

1、Vue3.0中的一个新的配置项,值为一个函数
2、setup是所有CompositionAPI表演的舞台
3、组件中所用到的:数据、方法等等,均需要配置在setup中
4、setup函数有两种返回值

	1.若返回一个对象,则对象中的属性、方法,在模板中均可以直接使用。(重点关注!)
	2.若返回一个渲染函数:则可以自定义渲染内容。(了解)

5、注意点:

1.尽量不要与Vue2.x配置混用
	    Vue2.x配置(data、methos、computed...)中可以访问到setup中的属性、方法
	    但在setup中不能访问到Vue2.x配置(data、methos、computed...)。
		如果有重名,setup优先。
2.setup不能是一个async函数,因为返回值不再是return的对象,而是promise,模板看不到return对象中的属性,

setup的两个注意点

  • setup执行的时机
    • 在beforeCreact之前执行一次,this是undefined
  • setup的参数
    • props:值为对象,包含:组件外部传递过来,且组件内部声明接收了的属性
    • context:上下文对象
      • attr:值为对象,包含:组件外部传递过来,但没有在props中声明的属性,相当于:this.$attrs
      • slots:收到的插槽内容,相当于this.$slots
      • emit:分发自定义事件的函数,相当于this.$emit

ref函数

  • 作用:定义一个响应式的数据
  • 语法:const xxx = ref(initValue)
    • 创建一个包含响应式数据的引用对象(reference对象)
    • JS中操作数据:xxx.value
    • 模版中读取数据,不需要.value,直接<div>{{xxx}}</div>
  • 备注:
    • 接收的数据可以是基本数据类型,也可以是对象类型
    • 基本数据类型:响应式依然靠object.defineProperty()的get与set完成
    • 对象类型的数据:内部求助了Vue3.0中的一个新函数一
      reactive 函数
      在这里插入图片描述

reactive函数

在这里插入图片描述
在这里插入图片描述

Vue3.0中的响应式原理

vue2.x的响应式

在这里插入图片描述

Vue3.0的响应式

在这里插入图片描述

在这里插入图片描述
MDN文档中描述Proxy和Reflect:

  • Proxy:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy
  • Reflect:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect

在这里插入图片描述

reactive对比 ref

  • 从定义的角度
    • ref用来定义:基本数据类型
    • reactive用来定义对象 (或数组)数据类型
    • 备注:ref也可以用来定义对象(或数组)类型数据,它内部会自动通过reactive转为代理对象。
  • 从原理的角度
    • ref通过object.defineProperty()getset来实现响应式(数据劫持)
    • reactive通过proxy来实现响应式,并通过reflect操作源对象内部的数据
  • 从使用的角度
    • ref定义数据:操作数据需要用.value,读取数据时模版中直接读取不需要.value
    • reactive定义的数据:操作数据与读取数据都不需要.value

计算属性与监视

computed函数

  • 与Vue2中的配置功能一致
  • 写法
    在这里插入图片描述

watch函数

  • 与Vue2中的watch配置是一致的

  • 两个小坑

    • 监视reactive定义的响应式数据时,oldValue无法正确获取,强制开启了深度监视(deep配置失效)
    • 监视reactive定义的响应式数据中的某个属性时,deep配置有效
  • 情况一
    在这里插入图片描述

  • 情况二
    在这里插入图片描述

  • 情况三
    在这里插入图片描述

  • 情况四
    在这里插入图片描述

  • 情况五
    在这里插入图片描述

  • 特殊情况
    在这里插入图片描述

watchEffect函数

  • watch的套路是:既要指明监视的属性,也要指明监视的回调。
  • watchEffect的套路是:不用指明监视哪个属性,监视的回调中用到哪个属性那就监视哪个属性
  • watchEffect有点像computed:
    • 但computed注重计算出来的值(回调函数的返回值)所以必须写返回值
    • 而watchEffect更注重过程(回调函数体)所以不用写返回值
      在这里插入图片描述

自定义hook函数

  • 什么是hook?本质是一个函数,把setup函数中使用的composition API进行封装
  • 类似于vue2中的mixin
  • 自定义hook的优势,复用代码,让setup中的逻辑更清晰
    新增一个文件目录hooks
    在这里插入图片描述
    定义:
    在这里插入图片描述
    使用:
    在这里插入图片描述

toRef(重点)

  • 作用:创建一个ref对象,其value值指向另一个对象中的某个属性。
  • 可以将对象中的属性进行拆解使用
  • 语法:const name =toRef(person,'name')
  • 应用:要将响应式对象中的某个属性单独提供给外部使用时。
  • 扩展:toRefstoRef功能一致,但可以批量创建多个ref对象,语法:toRefs(person)

六、其他Composition API

shallowReactive与shallowRef

  • shallowReactive:只处理对象最外层属性的响应式(浅响应式)
  • shallowRef: 只处理基本数据类型的响应式,不进行对象的响应式处理。
  • 什么时候使用?
    • 如果有一个对象数据,结构比较深,但变化时只是外层属性变化 ===>shallowReactive。
    • 如果有一个对象数据,后续功能不会修改该对象中的属性,而是生新的对象来替换 ===>shallowRef。

readonly与shallowReadonly

  • readonly: 让一个响应式数据变为只读的(深只读)
  • shallowReadonly:让一个响应式数据变为只读的(浅只读)
  • 应用场景:不希望数据被修改时

toRaw与markRaw

  • toRaw:
    • 作用:将一个由reactive 生成的响应式对象转为普通对象
    • 使用场景:用于读取响应式对象对应的普通对象,对这个普通对象的所有操作,不会引起页面更新
  • markRaw:
    • 作用:标记一个对象,使其永远不会再成为响应式对象。
    • 应用场景:
      • 有些值不应被设置为响应式的,例如复杂的第三方类库等,
      • 当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能。

customRef

  • 作用:创建一个自定义的ref,并对其依赖项跟踪和更新触发进行显示控制
  • 实现防抖效果
    在这里插入图片描述

provide与inject

  • 作用:实现祖孙组件通信
  • 套路:父组件有一个 provide选项来提供数据,子组件有一个 inject 选项来开始使用这些数据
  • 具体实现
    • 祖宗组件中
      在这里插入图片描述

    • 孙子组件中
      在这里插入图片描述

响应式数据的判断

  • isRef: 检查一个值是否为一个 ref 对象
  • isReactive:检査一个对象是否是由 reactive创建的响应式代理。
  • isReadonly: 检查一个对象是否是由readonly创建的只读代理
  • isProxy: 检查一个对象是否是由 reactive或者readonly方法创建的代理

七、Composition API 的优势

options API 存在的问题

在这里插入图片描述

Composition API 的优势

在这里插入图片描述

八、新的组件

Fragment

  • 在Vue2中: 组件必须有一个根标签
  • 在Vue3中:组件可以没有根标签,内部会将多个标签包含在一个Fragment虚拟元素中
  • 好处: 减少标签层级,减小内存占用

Teleport

to中可以写body,css的选择器

在这里插入图片描述

九、其他

全局API的转移

  • VUE2中有许多全局api和配置
    • 例如:注册全局组件,注册全局指令等
      在这里插入图片描述
  • vue3中对这些api做出了调整
    • 将全局的API即Vue.xxx调整到应用实例(app)上
      在这里插入图片描述

其他改变

  • data始终应该被声明为一个函数
  • 过度类名的更改
    • vue2.0写法
      在这里插入图片描述
    • vue3写法
      在这里插入图片描述
  • 移除keyCode作为 v-on 的修饰符,同时也不再支持 config.keycodes
  • 移除 v-on.native修饰符
    • 父组件中绑定事件
      在这里插入图片描述
    • 子组件中声明自定义事件
      在这里插入图片描述
  • 移除了过滤器
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/504251.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java实验报告2

一、实验目的 本实验为Java课程的第二次实验&#xff0c;其主要目的如下&#xff1a; 理解继承和多态的概念&#xff1b; 掌握域和方法在继承中的特点&#xff1b; 掌握构造函数的继承和重载&#xff1b; 掌握this和super的用法&#xff1b; 二、实验原理 ​ 继承性是面…

日志集中审计系列(3)--- LogAuditor接收UMA设备syslog日志

日志集中审计系列(3)--- LogAuditor接收UMA设备日志 前言拓扑图设备选型组网需求配置思路操作步骤结果验证前言 近期有读者留言:“因华为数通模拟器仅能支持USG6000V的防火墙,无法支持别的安全产品,导致很多网络安全的方案和产品功能无法模拟练习,是否有真机操作的实验或…

深度学习(四)笔记1

0.前提 往后我会以我的笔记形式来发布我的文章&#xff08;每3次笔记为一篇文章&#xff09;&#xff0c;有爱的人可以自取学习&#xff0c;当然如果可以的话我会把我的文章翻出来变成文章。 1.数据操作 本期4.1数据操作的链接在这。 链接&#xff1a;https://pan.baidu.com/s…

测试图片可否直接粘贴进csdn,后期删除

java图书管理系统mysqlswing版本 V1.0.1版 P1&#xff0c;简介项目功能&#xff1a; 运行主函数运行程序&#xff0c;进入管 理系统的登录界面

9.Python类与对象

1 面向对象 类和对象都是面向对象中的重要概念。面向对象是一种编程思想&#xff0c; 即按照真实世界的思维方式构建软件系统。 例如&#xff0c;在真实世界的校园里有学生和老师&#xff0c;学生有学号、姓名、所 在班级等属性&#xff08;数据&#xff09;&#xff0c;还有…

顺序表详解

目录 线性表顺序表概念及结构接口实现初始化函数void SLInit(SL *psl);销毁函数 void SLDestroy(SL *psl);尾插函数void SLPushBack(SL* psl ,SLDataType x);封装函数void SLCheckCapacity(SL* psl)头插函数void SLPushFront(SL* psl, SLDataType x);尾删函数void SLPopBack(SL…

洛谷_P2437 蜜蜂路线_python写法_高精度加法

目录 1. 40分代码 2.高精度加法 3.全AC代码 4.惊掉下巴的解法 P2437 蜜蜂路线 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 1. 40分代码 m, n map(int,input().split())ans 0 d [1,2] flag [0 for _ in range(n1)] def fun(step):global ansif step n:ans 1return…

了解微信小程序开发流程

前言&#xff1a;本文只适合初学者了解大致开发流程&#xff0c;好让后续学习胸有成竹&#xff0c;有条不紊 1、开发准备 ① 在微信公众平台 (qq.com)完成微信小程序账号注册 ②下载安装微信小程序开发者工具 2、创建项目 新建 新建时需要的appid&#xff0c;在微信公众平…

GeoLite2 geoip数据库下载和使用

GeoLite2 数据库是免费的 IP 地理定位数据库&#xff0c;与MaxMind 的 GeoIP2 数据库相当&#xff0c;但准确度较低 。GeoLite2 国家、城市和 ASN 数据库 每周更新两次&#xff0c;即每周二和周五。GeoLite2 数据还可作为 GeoLite2 Country 和 GeoLite2 City Web 服务中的 Web …

微服务监控:确保分布式系统的可观察性与稳定性

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 目录 一、前言二、微服务监控的重要性三、关键监控指标四、常用监控工具五、最佳实践六、结论 一、前言 在当前的软件开发领域&a…

Lua环境下载与配置

这里介绍如何下载已经编译好的Lua环境&#xff0c;如何配置Lua环境。 如希望自己从源码编译Lua环境&#xff0c;请自行搜索资料。 第一步&#xff1a;下载编译好的lua环境 打开下面链接&#xff0c;然后根据指引下载。 The Programming Language Luahttps://www.lua.org/hom…

【Python系列】合并配置文件的最佳实践

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

ssm停车场管理系统

点赞收藏关注 → 私信领取本源代码、数据库 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于停车场管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了停…

【微服务】spring状态机模式使用详解

一、前言 在很多系统中&#xff0c;通常会涉及到某个业务需要进行各种状态的切换操作&#xff0c;例如在审批流程场景下&#xff0c;某个审批的向下流转需要依赖于上一个状态的结束&#xff0c;再比如电商购物场景中&#xff0c;一个订单的生命周期往往伴随着不同的状态&#…

基于java+springboot+vue实现的付费自习室管理系统(文末源码+Lw+ppt)23-400

摘 要 付费自习室管理系统采用B/S架构&#xff0c;数据库是MySQL。网站的搭建与开发采用了先进的java进行编写&#xff0c;使用了springboot框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。主要功能包括&#xff1a;个人信息修改&#xff0c;对用户…

JavaSE类和对象

目录 1.面向对象 1.1面向对象的过程 2.类的定义和使用 2.1定义 2.2使用 2.2.1实例化 2.2.2访问类中数据 2.3类和对象说明 3.this引用 4.对象的构造及初始化 4.1初始化对象 4.2构造方法 4.2.1特性 4.3默认初始化 4.4就地初始化 5.封装 5.1概念 ​编辑 5.2访问限定…

ky9250(mpu9250)取得原始数据后通过简易卡尔曼滤波获取角度

我们通过ky9250(mpu9250)取得原始数据后&#xff08;gx,gy,gz,ax,ay,az,mx,my,mz&#xff09;后想通过原始数据解算角度姿态信息(想试验各种算法比如卡尔曼、mahony,Madgwick)&#xff0c;现将使用简易卡尔曼滤波获取姿态角度roll,pitch,yaw的方法介绍如下&#xff1a; 未完 稍…

探索C语言中的联合体和枚举:让处理数据更加得心应手

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;http://t.csdnimg.cn/Oytke 小新的主页&#xff1a;编程版小新-CSDN博客 C语言中有内置类型&#xff0c; 比如&…

vue3封装Element表格

配置表头配置多选配置序号自定义操作列按钮 封装表格 Table.vue <template><el-table:data"tableData"width"100%":maxHeight"maxHeight"v-bind"$attrs"selection-change"handleSelectChange"row-click"hand…

【Python】Scrapy 爬虫(简单了解)

Scrapy项目开发流程 1.创建项目 打开cmd scrapy startproject example 就可以创建一个Scrapy项目。这时&#xff0c;我们找到并打开这个文件。 复制路径&#xff1a;C:\Users\25194\example 复制到pycharm里面&#xff0c;打开该项目。 文件介绍 scrapy.cfg setting表明项…