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修饰符
    • 父组件中绑定事件
      在这里插入图片描述
    • 子组件中声明自定义事件
      在这里插入图片描述
  • 移除了过滤器
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙原生应用开发-网络管理HTTP数据请求

一、场景介绍 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 二、接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表&#xff0c;具体的…

C/C++中重载函数取地址的方法

目录 1.现象 2.指定参数取函数地址 3.利用Qt的类QOverload 1.现象 函数重载在C/C编码中是非常常见的&#xff0c;但是我们在std::bind或std::function绑定函数地址的时候&#xff0c;直接取地址&#xff0c;程序编译就会报错&#xff0c;示例如下&#xff1a; class CFunc1…

2024年妈妈杯数学建模思路A题B题C题D题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

鸿蒙迎来大爆发,有必要转行鸿蒙开发吗?

鸿蒙系统&#xff0c;作为华为自主研发的操作系统&#xff0c;正在迎来前所未有的大爆发&#xff0c;以强大的分布式技术和创新能力&#xff0c;不仅支持多种终端设备&#xff0c;更在构建一个日益完善的生态系统&#xff0c;在当前的科技浪潮中。面对这样的发展趋势&#xff0…

Git版本管理使用手册 - 8 - 合并分支、解决冲突

合并整个开发分支 切换到本地test分支&#xff0c;选择右下角远程开发分支&#xff0c;选择Merge into Current。然后提交到远程test仓库。 合并某次提交的代码 当前工作区切换成test分支&#xff0c;选择远程仓库中的dev开发分支&#xff0c;选择需要合并的提交版本右击&a…

Python基础:标准库 -- pprint (数据美化输出)

1. pprint 库 官方文档 pprint --- 数据美化输出 — Python 3.12.2 文档 pprint — Data pretty printer — Python 3.12.2 documentation 2. 背景 处理JSON文件或复杂的嵌套数据时&#xff0c;使用普通的 print() 函数可能不足以有效地探索数据或调试应用程序。下面通过一…

linux提权笔记

1 linux提权简介 Linux提权&#xff0c;简单来说&#xff0c;就是用户尝试获取高于其当前权限级别的系统访问权限的过程。在Linux系统中&#xff0c;root用户拥有最高的权限&#xff0c;能够执行任何操作&#xff0c;包括修改系统文件、安装软件、管理用户账户等。而普通用户通…

Java基础语法(五)| 方法

1. 方法概述 1.1 什么是方法 方法&#xff08;method&#xff09;完成某一个特定功能的代码块。 1.2 方法基本使用 将资料中给大家提供的打怪物发射炮弹重复的代码&#xff0c;把一些重复代码进行抽取&#xff08;封闭&#xff09;思想. 调用格式 方法名(); 注意&#xff1a; …

redis集群配置(精华版):哨兵模式

哨兵模式 概念单机单个哨兵多哨兵模式 动手实操1、环境准备2、配置sentinel.conf配置文件3、启动哨兵&测试4、SpringBoot测试哨兵模式故障转移功能 概念 主从切换技术的方法是&#xff1a;当主服务器宕机后&#xff0c;需要手动把一台从服务器切换为主服务器&#xff0c;这…

无人驾驶矿卡整体解决方案(5g物联网通信方案)

​无人驾驶矿卡是智能矿山的重要组成部分,通过远程操控替代人工驾驶,可以显著提高采矿效率和作业安全性。但要实现无人驾驶矿卡,需要依赖于可靠高效的通信网络,来传输现场视频、控制指令和运行数据。以下是某大型煤矿在部署无人驾驶矿卡时,所采用的星创易联物联网整体解决方案。…

【C++的奇迹之旅】C++关键字命名空间使用的三种方式C++输入输出命名空间std的使用惯例

文章目录 &#x1f4dd;前言&#x1f320; C关键字(C98)&#x1f309; 命名空间&#x1f320;命名空间定义&#x1f309;命名空间使用 &#x1f320;命名空间的使用有三种方式&#xff1a;&#x1f309;加命名空间名称及作用域限定符&#x1f320;使用using将命名空间中某个成员…

第十四届蓝桥杯JavaA组省赛真题 - 特殊日期

解题思路&#xff1a; 暴力秒了 public class Main {public static void main(String[] args) {int cnt 0;for (int i 1900; i < 9999; i) {for (int j 1; j < 12; j) {for (int k 1; k < days(i, j); k) {if (sum(i) sum(j) sum(k)) cnt;}}}System.out.print…

Nginx漏洞之未授权访问和源码泄漏漏洞处理

一、漏洞描述 某次安全扫描&#xff0c;发现某平台存在资源&#xff1a;未授权访问和源码泄漏&#xff1b;攻击者可能获取到网站的配置文件、敏感数据存储位置和访问凭证等信息。这意味着攻击者可以获得对网站的完全或部分控制权&#xff0c;进而进行恶意篡改、删除或添加恶意…

Linux-进程控制

&#x1f30e;进程控制【上】 文章目录&#xff1a; 进程控制 为什么要有地址空间和页表 程序的内存       程序申请内存使用问题 写时拷贝与缺页中断 父子进程代码共享       为什么需要写时拷贝       页表的权限位       缺页中断 退出码和错误码…

SpringBoot 登录认证(二)

SpringBoot 登录认证&#xff08;一&#xff09;-CSDN博客 SpringBoot 登录认证&#xff08;二&#xff09;-CSDN博客 SpringBoot登录校验&#xff08;三&#xff09;-CSDN博客 HTTP是无状态协议 HTTP协议是无状态协议。什么又是无状态的协议&#xff1f; 所谓无状态&…

毅速丨一体化压铸浪潮涌动 3D打印压铸模具将迎来广泛应用

近年来&#xff0c;特斯拉等车企的革新步伐引领着汽车制造业的变革&#xff0c;车身一体化压铸技术日益凸显其地位。这一技术不仅简化了车身制造的繁琐流程&#xff0c;更在供应链整合上实现了革命性的突破&#xff0c;为汽车制程带来了前所未有的经济性提升。 压铸技术&#x…

【面试那些事儿】浏览器键入网址到网页显示,期间发生了什么

当用户在浏览器中键入网址并按下回车键后&#xff0c;直到最终显示出完整的网页内容&#xff0c;这一过程中经历了哪些步骤呢&#xff1f; 这是一道经典的面试题&#xff0c;我们来看看具体有哪些阶段。 1. 解析URL 浏览器首先解析用户输入的URL&#xff0c;判断它的语法和协…

大话设计模式之策略模式

策略模式是一种行为设计模式&#xff0c;它允许在运行时选择算法的行为。这种模式定义了一族算法&#xff0c;将每个算法都封装起来&#xff0c;并且使它们之间可以互相替换。 在策略模式中&#xff0c;一个类的行为或其算法可以在运行时改变。这种模式包含以下角色&#xff1…

flume配置文件后不能跟注释!!

先总结&#xff1a;Flume配置文件后面&#xff0c;不能跟注释&#xff0c;可以单起一行写注释 报错代码&#xff1a; [ERROR - org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:158)] Unable to deliver event. Exception follows. org.apache.flume.EventDel…

2024跨境电商新型选品方法

是不是有很多卖家一到旺季就为选品发愁&#xff1f;担心选错产品或是错过机会&#xff1f;今天就给大家打开思路&#xff0c;分享2024更好用的选品方法&#xff0c;解决大家的选品难题&#xff01; 2024跨境电商新型选品方法 1️⃣ 本土卖家观察法 利用社交媒体平台如Instagram…