Vue3(二):Vue3生命周期、自定义hook、其他API、Suspense等组件

news2024/11/17 10:02:54

Vue3:第二章

  • 一、Vue3生命周期
  • 二、自定义hook函数
  • 三、toRef
  • 四、其他Composition API
    • 1.shallowRef与shallowReactive
    • 2.readonly与shallowReadonly
    • 3.toRaw 与 markRaw,customRef
    • 4.provide和inject
    • 5.响应式数据的判断
  • 五、组合式API的优势
    • 1.选项式API的问题
    • 2.组合式API的优势
  • 六、新的组件和其他功能
    • 1.Teleport
    • 2.Suspense

一、Vue3生命周期

在这里插入图片描述
Vue3中可以继续使用Vue2中的生命周期钩子(写在setup函数外面),但是有两个更改:

beforeDestroy 改名为 beforeUnmount
destroyed 改名为 unmounted

如果要写在setup函数里面,那么要注意,这些钩子会换名字

beforeCreate ===> setup()
created =======> setup()
beforeMount ===> onBeforeMount
mounted =======> onMounted
beforeUpdate ===> onBeforeUpdate
updated =======> onUpdated
beforeUnmount ==> onBeforeUnmount
unmounted =====> onUnmounted

如果写到setup函数里面,是没有beforeCreatecreated这两个钩子的,因为setup的执行时机就相当于这两个钩子(setup会先于所有的钩子执行,把想在这两个钩子里写的代码写到steup最前面就行了)

二、自定义hook函数

这个其实和React类似,也和vue2中的mixin类似,hook本质是一个函数,用use开头,把setup函数中使用的Composition API进行了封装。可以更方便我们去复用处理数据的逻辑

export const useSum = function() {
	let sum = ref(0)
	处理数据的逻辑......
	各种Composition API......
	return sum
}
setup() {
	let sum = useSum()
	......
	return {sum}
}

优势:把setup函数中使用的Composition API进行了封装。

三、toRef

作用:创建一个 ref 对象,其value值指向另一个对象中的某个属性。

import { toRef } from 'vue'
语法:
const name = toRef(person,'name')
const age = toRef(person,'age')
const salary = toRef(person.job.j1, 'salary')

应用: 要将响应式对象中的某个属性单独提供给外部使用时。

这样的话当我们去修改这些重新定义的属性时,会同步更改person中的对应属性。但是如果const name = ref(person,'name'),这样可以改name,但是person中的name不会同步修改,这就是toRefref的区别

扩展:toRefs 与toRef功能一致,但可以批量创建多个 ref 对象,语法:

const { name } = {...toRefs(person)}

四、其他Composition API

1.shallowRef与shallowReactive

shallowReactive:只处理对象最外层属性的响应式(浅响应式)。

shallowRef:只处理基本数据类型的响应式, 不进行对象的响应式处理。

其实没啥用,什么时候使用?

如果有一个对象数据,结构比较深, 但变化时只是外层属性变化 ===> shallowReactive。
如果有一个对象数据,后续功能不会修改该对象中的属性,而是生新的对象来替换 ===> shallowRef。

2.readonly与shallowReadonly

readonly: 让一个响应式数据变为只读的(深只读,每一层都不能改,都是readonly)。
shallowReadonly:让一个响应式数据变为只读的(浅只读,只有第一层readonly,深层次仍然可以改)。
应用场景: 不希望数据(尤其是这个数据是来自与其他组件时)被修改时。

3.toRaw 与 markRaw,customRef

这些用的少,有需要去看官网

4.provide和inject

作用:实现祖与后代组件间通信

套路:父组件有一个 provide 选项来提供数据,后代组件有一个 inject 选项来开始使用这些数据

具体写法:

祖组件中:

import { provide } from 'vue'
setup(){
    ......
    let car = reactive({name:'奔驰',price:'40万'})
    provide('car',car)
    ......
}

后代组件(任何一个后代)中:

import { inject } from 'vue'
setup(props,context){
    ......
    const car = inject('car')
    cons
    return {car}
    ......
}

5.响应式数据的判断

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

五、组合式API的优势

1.选项式API的问题

使用传统的OptionsAPI,新增或者修改一个需求,需要分别在data、methods、computed中修改

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

2.组合式API的优势

我们可以把相关功能的代码更有序地组织在一起

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

六、新的组件和其他功能

1.Teleport

什么是Teleport?—— Teleport 是一种能够将我们的组件html结构移动到指定位置的技术。

<teleport to="移动位置,值可以是body、#app等html结构,默认好像插到最后">
	<div v-if="isShow" class="mask">
		<div class="dialog">
			<h3>我是一个弹窗</h3>
			<button @click="isShow = false">关闭弹窗</button>
		</div>
</teleport>

2.Suspense

等待异步组件时渲染一些额外内容,提升用户体验,类似于路由懒加载吧
defineAsyncComponent可以实现

import Child from './components/Child.vue' //正常引入
import {defineAsyncComponent} from 'vue'
const Child = defineAsyncComponent(()=>import('./components/Child.vue')) //异步加载

那其实Suspense就是实现的defineAsyncComponent同样的效果,使用Suspense包裹组件,并配置好default 与 fallback

<template>
    <div class="app">
        <h3>我是App组件</h3>
        <Suspense>
            <template v-slot:default>
                <Child/>
            </template>
            <template v-slot:fallback>
                <h3>加载中.....</h3>
            </template>
        </Suspense>
    </div>
</template>

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

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

相关文章

股票买卖篇(II,III,IV)--基础,详细!状态机简单应用

目录 股票买卖II 本题思路 关于异常值的解释 代码 股票买卖III 本题思路 (包括对交易过程的理解&#xff0c;需认真理解) 代码 股票买卖 IV 本题思路 代码 股票买卖II 输入样例 6 7 1 5 3 6 4 输出样例 7 输入样例 5 1 2 3 4 5 输出样例 4 本题思路 该题是最…

1. Mysql InnoDB中的索引

一、InnoDB中的索引 InnoDB存储引擎支持以下几种常见的索引&#xff1a;B树索引、全文索引、哈希索引&#xff0c;其中比较关键的是B树索引。 1. B树索引介绍 InnoDB中的索引自然也是按照B树来组织的&#xff0c;前面我们说过B树的叶子节点是用来放数据的。但是放什么数据呢…

攻防世界-基础android

下载链接&#xff1a;下载 参考链接&#xff1a;攻防世界-Mobile-基础android (Misc经验解法&#xff09;_攻防世界基础android_Q_yt的博客-CSDN博客 方法一&#xff1a; 这是个偏向Misc的解题思路&#xff0c;下载完是个apk文件&#xff0c;载入010 Editor看一下&#xff0…

京东工作8年,肝到T8就剩这份心得了,已助朋友拿到10个Offer

在京东工作了8年&#xff0c;工作压力大&#xff0c;节奏快&#xff0c;但是从技术上确实得到了成长&#xff0c;尤其是当你维护与大促相关的系统的时候&#xff0c;熬到T7也费了不少心思&#xff0c;小编也是个爱学习的人&#xff0c;把这几年的工作经验整理成了一份完整的笔记…

TiDB亿级数据亚秒响应查询方案介绍

目录 1 什么是TiDB2 什么是NewSQL2.1 传统SQL的问题2.1.1 升级服务器硬件2.1.2 数据分片 2.2 NoSQL 的问题2.2.1 优点2.2.2 缺点 2.3 NewSQL 特性2.3.1 NewSQL 的主要特性&#xff1a;2.4 三种SQL的对比 3 TiDB怎么来的3.1 TiDB社区版和企业版 4 TIDB核心特性4.1 水平弹性扩展4…

【JUnit技术专题】「入门到精通系列」手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(核心API篇)

手把手零基础带你玩转单元测试&#xff0c;让你的代码更加“强壮”&#xff08;核心API篇&#xff09; JUnit 中的重要的 APIAssert 类TestCase 类TestResult 类TestSuite 类 JUnit 中的重要的 API JUnit 中的最重要的程序包是 junit.framework 它包含了所有的核心类。一些重要…

数字孪生:数字世界与现实世界的交汇

数字孪生是一种崭新的技术,指将现实世界中的物理实体、系统或过程通过数字化技术在虚拟数字世界中建立起虚拟模型。数字孪生可以帮助人们以更小的成本地理解和预测现实世界中的物理实体、系统或过程的行为和性能,从而提高生产效率、降低成本、减少风险等。 如今数字孪生技术…

Makerbase SimpleFOC ESP32 例程1 双电机开环速度测试

Makerbase SimpleFOC ESP32 例程1 双电机开环速度测试 第一部分 硬件介绍 1.1 硬件清单 序号品名数量1ESP32 FOC V1.0 主板12YT2804电机2312V电源适配器14USB 线1 注意&#xff1a;YT2804是改装的云台无刷电机,带有AS5600编码器&#xff0c;可实现360连续运转。 主要参数如…

刷题记录:双指针 | leetcode-1156. 单字符重复子串的最大长度 2023/6/3

1156. 单字符重复子串的最大长度 感觉这道题&#xff0c;双指针的思路很好想&#xff0c;但是要直接实现&#xff0c;对我而言还是有一些磕磕绊绊&#xff08;还是题做少了qaq&#xff09;。 思路是这样的&#xff0c;比如字符串序列为&#xff1a; aaabaaaba 那么一开始&am…

【leetcode】1156. 单字符重复子串的最大长度

1156. 单字符重复子串的最大长度 问题描述问题分析解决方案 问题描述 1156. 单字符重复子串的最大长度 如果字符串中的所有字符都相同&#xff0c;那么这个字符串是单字符重复的字符串。 给你一个字符串 text&#xff0c;你只能交换其中两个字符一次或者什么都不做&#xff…

基于AT89C52单片机的液晶多功能电子台历设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87858426 源码获取 第5章 液晶多功能电子台历的设计 5.1 功能要求 该项目以单片机STC89C54为核心,结合单线数字温度传感器DS18B20、时钟芯片DS1302和液晶显示器12864设计而…

GPU推理和端侧NPU推理的一处不同

端侧AI推理主要使用NPU完成,为了在性能,功耗和面积和通用性之间取得平衡,主流NPU采用了加速器架构,将算子固化在硬件中,并辅以可编程单元执行一些自定义算子/长尾算子兼顾灵活性。在计算方面,为了提高存储使用效率和加速计算,在满足计算精度的前提下,NPU普遍采用定点计…

编程的未来 - 还有未来么?

缘起 唐门教主上个月某天深夜写了一篇博客 --《编程的未来》&#xff0c;要我谈谈感想。 这也是最近软件工程师们聊得比较多的问题&#xff0c;上周&#xff0c;在上海的 “关东小磨” 和十多位 CSDN 博主聚会的时候&#xff0c;大家也稍微谈了一下这个话题&#xff0c;但是谈…

一哥们从小厂逆袭,涨薪50%,真是麻雀啄了牛屁股,雀食牛逼啊

前言 大多数情况下&#xff0c;软件测试人员的个人技能成长速度&#xff0c;远远大于公司规模或业务的成长速度。所以&#xff0c;跳槽成为了这个行业里最常见的一个词汇。 实际上&#xff0c;跳槽的目的无非是为了涨薪或是职业发展&#xff0c;我也不例外。普通本科毕业后&a…

vscode课程学习分析选课作业系统nodejs+vue

软件体系结构方案&#xff1a;由于本系统需要在不同设备上都能运行&#xff0c;而且电脑配置要求也要越低越好&#xff0c;为了实现这一要求&#xff0c;经过考虑B/S结构成为最佳之选。使用B/S结构的系统可以几乎在任何电脑上运行&#xff0c;只要浏览器可以正常工作就可以正常…

操作系统复习5.1.0-I/O管理

分类 按使用特性分 人机交互类&#xff1a;键盘、鼠标、打印机 存储设备&#xff1a;移动硬盘、光盘 网络通信设备&#xff1a;调制解调器 按速率分 低速设备&#xff1a;键鼠 中速设备&#xff1a;打印机 高速设备&#xff1a;磁盘 按信息交换单位分 块设备&#xff1a;…

yum和vim【Linux操作系统】

Linux软件包管理器 yum Linux安装软件&#xff1a; 源代码安装&#xff08;下载到程序的源代码&#xff0c;进行编译&#xff0c;得到可执行程序&#xff0c;太麻烦&#xff0c;因此有些人会将有些常用的软件提前编写好&#xff0c;做成软件包&#xff09; rpm安装&#xff08;…

BCD格式及与十进制/十六进制的转换

本文框架 前言1. BCD码是什么&#xff1f;2. 不同进制与BCD码之间的转换2.1 十进制与BCD码的转换2.1.1 十进制转换为BCD码2.1.2 BCD码转换为十进制 2.2 十六进制与BCD码的转换 前言 在诊断快照开发中会遇到保存年月日等使用BCD码格式的需求&#xff0c;本篇我们就一起看一下BC…

Sentinel监控微服务_流量控制_熔断降级_系统规则讲解

Sentinel 监控微服务 需求分析/图解 需求: 使用Sentinel 控制台对member-service-nacos-provider-10004 微服务进行实时监控 示意图 当调用了member-service-nacos-provider-10004 微服务时, 可以监控到请求的url/QPS/响应时间/流量 代码/配置实现 修改member-service-nac…

Redis之SDS数据结构的使用

目录 序言字符串 char*字符串数组简单动态字符串SDS 序言 Redis的几种基本数据结构有字符串&#xff08;String&#xff09;、哈希&#xff08;Hash&#xff09;、列表&#xff08;List&#xff09;、集合&#xff08;Set&#xff09;、有序集合&#xff08;Sorted Set&…