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://www.rhkb.cn/news/290488.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务(基础篇-004-Feign)

目录 http客户端Feign Feign替代RestTemplate&#xff08;1&#xff09; Feign的介绍&#xff08;1.1&#xff09; 使用Feign的步骤&#xff08;1.2&#xff09; 自定义配置&#xff08;2&#xff09; 配置Feign日志的两种方式&#xff08;2.1&#xff09; Feign使用优化…

架构整洁之道-读书总结

1 概述 1.1 关于本书 《架构整洁之道》&#xff08;Clean Architecture: A Craftsman’s Guide to Software Structure and Design&#xff09;是由著名的软件工程师Robert C. Martin&#xff08;又称为Uncle Bob&#xff09;所著。这本书提供了软件开发和架构设计的指导原则…

基于unbantu的nginx的配置

目录 前言: 1.安装nginx并进行测试 1.1使用nginx -v 命令查看版本 1.2开启服务 查看端口 1.3测试 2.nginx的静态资源访问配置 2.1创建静态资源存放的目录 2.2写入目录中测试文件对应的内容 2.3修改配置文件 2.4 测试 3.虚拟主机配置 3.1创建目录 3.2写入测试…

JoyPac:产品立项的5个思考及成功产品分析 | TopOn变现干货

5月26日&#xff0c;TopOn、罗斯基、广大大共同主办的《游戏赛道新机会》主题沙龙长沙站举办。活动邀请到多家头部平台和知名厂商的负责人&#xff0c;大家分别从自身的业务角度出发&#xff0c;分享了最新的行业变化和市场趋势。 在活动上&#xff0c;JoyPac产品VP王泽带来了…

HTML input 实现回车切换到下一个输入框功能

前言 遇到需求&#xff0c;在客户填写单子时&#xff0c;有多个输入框&#xff0c;为了省事&#xff0c;不需要频繁移动光标填写。 实现效果 实现方式一 HTML <input type"text" name"serialNumber1" onkeydown"cursor(this);"/><in…

DDos系列攻击原理与防御原理

七层防御体系 静态过滤 命中黑名单 对确定是攻击的流量直接加入黑名单&#xff08;源地址命中黑名单直接丢弃&#xff0c;缺乏机动性和扩展性&#xff09; 畸形报文过滤 畸形报文攻击 TCP包含多个标记位&#xff0c;排列组合有规律 • 现象&#xff1a;TCP标记位全为1 …

2015年认证杯SPSSPRO杯数学建模A题(第二阶段)绳结全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 A题 绳结 原题再现&#xff1a; 给绳索打结是人们在日常生活中常用的技能。对登山、航海、垂钓、野外生存等专门用途&#xff0c;结绳更是必不可少的技能之一。针对不同用途&#xff0c;有多种绳结的编制方法。最简单的绳结&#xff0c;有时称…

go发布包到github

1. 首先&#xff0c;我们在github上创建一个公有仓库并clone到本地 git clone https://github.com/kmust-why/gdmp-token.git cd gdmp-token/ 2. 在gdmp-token工程中初始化go.mod&#xff0c;其中后面的链接要跟github上创建的仓库和你的用户名对应 go mod init github.com…

谷歌seo怎么优化运营?

那些太大众的内容就不说了&#xff0c;在这里说一个后期谷歌seo可以去优化的一个方向&#xff0c;那就是电子邮件营销&#xff0c;这是一个间接营销seo的方案&#xff0c;电子邮件营销本身不会直接改变你在搜索结果中的排名&#xff0c;但它是一种强有力的工具&#xff0c;可以…

Scikit-Learn K近邻分类

Scikit-Learn K近邻分类 1、K近邻分类1.1、K近邻分类及原理1.2、超参数K1.3、K近邻分类的优缺点2、Scikit-Learn K近邻分类2.1、Scikit-Learn K近邻分类API2.2、K近邻分类实践(鸢尾花分类)2.3、交叉验证寻找最佳K2.4、K近邻分类与Pipeline1、K近邻分类 K近邻是一种常用的分类…

【单调栈】力扣84.柱状图中最大的矩形

上篇文章我们介绍了使用 无重复值 单调栈代码解决 含有重复值 的问题&#xff0c;在文章的最后&#xff0c;留下了一道考察相同思想的题目&#xff0c;今天我们来看看如何套路解决该题。 &#xff08;还没看过前几篇介绍的小伙伴赶快关注&#xff0c;在 「单调栈」 集合里查看…

用DataGrip连接hive时报错:User: root is not allowed to impersonate plck5,解决方法

你可以尝试关闭主机校验 修改hive安装目录下conf/hive-site.xml,将hive.server2.enable.doAs设置成false <property><name>hive.server2.enable.doAs</name><value>false</value><description>Setting this property to true will have H…

element-ui autocomplete 组件源码分享

紧接着 input 组件的源码&#xff0c;分享带输入建议的 autocomplete 组件&#xff0c;在 element-ui 官方文档上&#xff0c;没有这个组件的 api 目录&#xff0c;它的 api 是和 input 组件的 api 在一起的&#xff0c;看完源码之后发现&#xff0c;源码当中 autocomplete 组件…

java 抠取红色印章(透明背景)

一个亲戚让我帮他把照片里的红色印章抠出来&#xff0c;&#xff0c;&#xff0c;记录下处理过程&#xff0c;代码如下&#xff0c;可直接用&#xff1a; public static void signatureProcess(String sourceImagePath, String targetImagePath) {Graphics2D graphics2D null…

网络七层模型之传输层:理解网络通信的架构(四)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

算法---动态规划练习-7(按摩师)【类似打家劫舍】

按摩师 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 首先&#xff0c;给定一个整数数组 nums&#xff0c;其中 nums[i] 表示第 i 天的预约时间长度。 定义两个辅助数组 f 和 g&#xff0c;长度都为 n&#xff08;n 是数组…

Android14之深入理解sp模板类(二百零二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

linux安装Zookeeper的详细步骤

1.Java环境确认 确保已经安装了Java环境&#xff0c;没有的自行安装 2.官网下载包 Apache ZooKeeper 3.安装 3.1上传到linux&#xff0c;解压 我的目录为/root/apache-zookeeper-3.8.4-bin 进入到/root/apache-zookeeper-3.8.4-bin/conf目录下&#xff0c;执行命令复制zoo…

没学数模电可以玩单片机吗?

我们首先来看一下数电模电在单片机中的应用。数电知识在单片机中主要解决各种数字信号的处理、运算&#xff0c;如数制转换、数据运算等。模电知识在单片机中主要解决各种模拟信号的处理问题&#xff0c;如采集光照强度、声音的分贝、温度等模拟信号。而数电、模电的相互转换就…

这次轮到小米,遥遥领先!

年轻人的第一辆保时米 3 月28日晚小米首款汽车小米汽车 SU7 正式发布并上市&#xff0c;新车定位于“C 级高性能生态科技轿车”&#xff0c;提供双电机版本和单电机版本车型选择&#xff0c;并提供容量为 73.6 千瓦时以及 101 千瓦时电池可选&#xff0c;售价 21.59 万元-29.99…