Vue-vue3

news2024/11/17 15:57:27

  • 一、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://www.coloradmin.cn/o/1550450.html

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

相关文章

【Java程序设计】【C00381】基于(JavaWeb)Springboot的爱心商城管理系统(有论文)

【C00381】基于&#xff08;JavaWeb&#xff09;Springboot的爱心商城管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#x…

SSH 连接工具-Tabby(使用教程)

文章目录 SSH 连接工具-Tabby&#xff08;使用教程&#xff09;1.Tabby简介2.Tabby安装3.实现 SSH 远程连接4.SFTP文件传输5.将 Anaconda Prompt 配置到 Tabby 中 SSH 连接工具-Tabby&#xff08;使用教程&#xff09; 提起 SSH 大家首先想到的应该是国内的一款 Xshell 工具&a…

UE4 根据任意多个点,生成最近的线条

UE4自带的SplineMesh特点&#xff1a;Tangent值为0的时候&#xff0c;会断开一段距离&#xff0c;起点和终点并不是同一个位置&#xff1b;Tangent值不为0的时候&#xff0c;会计算出转角的mesh 1.计算所有线条的组合 2.Clear0宏&#xff1a;清除掉数组Distance0的值。注意这…

git提交-分支开发合并-控制台操作

git提交-分支开发合并-控制台操作 git的基本概念工作区、暂存区和版本库工作区&#xff1a;就是你在电脑里能看到的目录&#xff08;隐藏目录 .git不算工作区&#xff09;。暂存区&#xff1a;英文叫 stage 或 index。一般存放在本地的.git目录下的index 文件&#xff08;.git/…

Qt/QML编程之路:QPainter与OpenGL的共用(49)

在Qt编程中,有时会有这样一种场景:用OpenGL显示了一个3维立体图,但是想在右下角画一个2D的表格,里面写上几个字。那么这个时候就会出现QPainter与OpenGL共用或者说2D、3D共用。但是问题是调用了QPainter,drawline之后呢,OPenGL的状态被清空了丢失了,3D不显示了。 在Ope…

共射极放大电路理论计算

目录&#xff1a; 1、概述 2、理论计算 3、Multisim仿真验证 1&#xff09;静态工作点与放大倍数 2&#xff09;输入阻抗仿真 1、概述 如下图所示的共射极放大电路&#xff0c;本内容主要计算静态工作点电压、电压放大倍数与输入输出阻抗。 2、理论计算 列出方程如下&am…

helm 部署 Kube-Prometheus + Grafana + 钉钉告警部署 Kube-Prometheus

背景 角色IPK8S 版本容器运行时k8s-master-1172.16.16.108v1.24.1containerd://1.6.8k8s-node-1172.16.16.109v1.24.1containerd://1.6.8k8s-node-2172.16.16.110v1.24.1containerd://1.6.8 安装 kube-prometheus mkdir -p /data/yaml/kube-prometheus/prometheus &&…

NSString有哪些创建对象的方法?创建的对象分别存储在什么区域?

NSString有哪些创建对象的方法&#xff1f;创建的对象分别存储在什么区域&#xff1f; 一般通过NSString创建对象的方法有&#xff1a; NSString *string1 "123";NSString *string2 [[NSString alloc] initWithString:"123"];NSString *string3 [NSSt…

乐维更改IP地址

1.1 系统IP调整 vim /etc/sysconfig/network-scripts/ifcfg-ens1921.2 Web相关服务IP变更 1.2.1 编辑/itops/nginx/html/lwjkapp/.env文件,更改ZABBIXSERVER、ZABBIXRPCURL、DB_HOST中的IP 1.2.2 进入/itops/nginx/html/lwjk_app/目录下,执行php bin/manager process-conso…

『Apisix安全篇』APISIX 加密传输实践:SSL/TLS证书的配置与管理实战指南

&#x1f680;『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 &#x1f4e3;读完这篇文章里你能收获到 &#x1f31f; 了解SSL/TLS证书对于网络通信安全的重要性和基础概念。&#x1f527; 掌握在APISIX中配置SSL/TLS证书的基本步骤和方…

嵌入式开发——基础电路知识

1. 电路知识 1.1. 驱动能力 IC是数字逻辑芯片&#xff0c;其输出的是逻辑电平。逻辑电平0表示输出电压低于阈值电压&#xff0c;逻辑1表示输出电压高于阈值电压。负载则是被驱动的电路或元件&#xff0c;负载大小则指负载的电阻大小。 驱动能力主要表现在几个方面&#xff1…

centos2anolis

我的centos7原地升级到anolis7记录 注意&#xff1a;如果是桌面版请先卸载firefox&#xff0c;否则so文件冲突。 参考&#xff1a; CentOS 7和8Linux系统迁移到国产Linux龙蜥Anolis OS 8手册_disable pam_pkcs11 module in pam configuration-CSDN博客 关于 CentOS 迁移龙蜥…

【pytest、playwright】allure报告生成视频和图片

目录 1、修改插件pytest_playwright 2、conftest.py配置 3、修改pytest.ini文件 4、运行case 5、注意事项 1、修改插件pytest_playwright pytest_playwright.py内容如下&#xff1a; # Copyright (c) Microsoft Corporation. # # Licensed under the Apache License, Ver…

Prompt Engineering的4 种方法

此为观看视频 4 Methods of Prompt Engineering 后的笔记。 从通用模型到专用模型&#xff0c;fine tuning&#xff08;微调&#xff09;和prompt engineering&#xff08;提示工程&#xff09;是2种非常重要的方法。本文深入探讨了prompt engineering的4种方法。 首先&#…

Trello国内替代工具有哪些?分享5款

盘点5款类似Trello的本地部署项目管理工具&#xff1a;1.PingCode&#xff1b;2.Worktile&#xff1b;3.Teambition&#xff1b;4.redmine&#xff1b;5.TAIga.io。 Trello是一款杰出的协作与工作管理应用&#xff0c;专为追踪团队项目、凸显当前活动任务、分配责任人&#xff…

爬虫(Web Crawler)介绍与应用

## 摘要 本文将介绍什么是爬虫&#xff08;Web Crawler&#xff09;以及其在信息抓取、数据分析等领域的应用。我们将深入探讨爬虫的工作原理、设计特点以及开发过程中需要考虑的关键问题。 ## 一、什么是爬虫 爬虫是一种自动化程序或脚本&#xff0c;用于从互联网上抓取信息…

计算机组成原理-6-计算机的运算方法

6. 计算机的运算方法 文章目录 6. 计算机的运算方法6.1 机器数的表示6.1.1 无符号数和有符号数6.1.2 有符号数-原码6.1.3 有符号数-补码6.1.4 有符号数-反码6.1.5 有符号数-移码6.1.6 原码、补码、反码的比较 6.2 数的定点表示和浮点表示6.2.1 定点表示6.2.2 浮点表示6.2.3 ΔI…

Lilishop商城(windows)本地部署【docker版】

Lilishop商城&#xff08;windows&#xff09;本地部署【docker版】 部署官方文档&#xff1a;LILISHOP-开发者中心 https://gitee.com/beijing_hongye_huicheng/lilishop 本地安装docker https://docs.pickmall.cn/deploy/win/deploy.html 命令端页面 启动后docker界面 注…

保障校园网络安全用堡垒机的几个原因分析

校园&#xff0c;人人都熟悉的地方&#xff0c;梦想知识开始的地方。在互联网数字化快速发展的今天&#xff0c;网络安全的学习环境是非常必要的。所以采购保障校园网络安全工具是必要的。那为什么一定要用堡垒机呢&#xff1f;这里我们一起来简单分析一下原因。 保障校园网络…

CleanMyMac X2024专业免费的国产Mac笔记本清理软件

非常高兴有机会向大家介绍CleanMyMac X 2024这款专业的Mac清理软件。它以其强大的清理能力、系统优化效果、出色的用户体验以及高度的安全性&#xff0c;在Mac清理软件市场中独树一帜。 CleanMyMac X2024全新版下载如下: https://wm.makeding.com/iclk/?zoneid49983 一、主要…