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

news/2024/5/4 20:06:00/文章来源:https://blog.csdn.net/weixin_42044763/article/details/130955423

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')consreturn {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.luyixian.cn/news_show_310803.aspx

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

相关文章

预训练大语言模型的三种微调技术总结:fine-tuning、parameter-efficient fine-tuning和prompt-tuning

预训练大模型&#xff0c;尤其是大语言模型已经是当前最火热的AI技术。2018年Google发布BERT模型&#xff08;BERT在DataLearner官方模型卡信息&#xff1a;https://www.datalearner.com/ai-models/pretrained-models/BERT &#xff09;的时候&#xff0c;大家还没有意识到本轮…

最热门高效的Node.JS开源第三方开发库和特点(持续更新......)

目录 1. Express 2. Socket.io 3. Mongoose 4. Passport 5. Async 6. PM2 7. Nodemailer 8. Request 9. Cheerio 10. Lodash 11. Bluebird 12. Winston 13. Socket.io-client 14. Node-sass 15. Moment 16. Gulp 17. Grunt 18. Chai 19. Sinon 20. Nodemon…

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

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

排序算法——直接插入排序

直接插入排序 基本思想 直接插入排序是一种简单明了的插入排序法&#xff0c;其基本思想是&#xff1a;把待排序的数据按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有数据插入完为止。 在现实生活中&#xff0c;我们玩扑克对牌进行排序就运用了…

银行从业——法律法规——金融基础知识

第二章 金融基础知识 第二节 货币政策 【 知识点1】 货币政策目标 制定和实施货币政策&#xff0c; 首先必须明确货币政策最终要达到的目的&#xff0c; 即货币政策的最终目标。中央银行通过货币政策工具操作直接引起操作目标的变动&#xff0c;操作目标的变动又通过一定的途…

设计一个像ESPN一样的实时视频流系统

功能需求 •直播事件与流之间的最大延迟不超过1分钟•系统应能够适应大量用户&#xff08;异构交付&#xff09;•系统应能将视频转换为不同的分辨率和编解码器•系统应具备容错性 视频转换和接收 由于我们正在实时直播整个事件&#xff0c;因此我们不能等待整个视频结束后再开…

华为OD机试真题 Java 实现【火车进站】【牛客练习题】

一、题目描述 给定一个正整数N代表火车数量&#xff0c;0<N<10&#xff0c;接下来输入火车入站的序列&#xff0c;一共N辆火车&#xff0c;每辆火车以数字1-9编号&#xff0c;火车站只有一个方向进出&#xff0c;同时停靠在火车站的列车中&#xff0c;只有后进站的出站了…

Nginx网络服务——主配置文件-nginx.conf

Nginx网络服务——主配置文件-nginx.conf 一、全局配置的六个模块简介二、nginx配置文件的详解1.全局配置模块2.I/O 事件配置3.HTTP 配置4.Web 服务的监听配置5.其他设置 三、访问状态统计与控制1.访问状态统计2.基于授权的访问控制3.基于客户端的访问控制 一、全局配置的六个模…

python实现Canny算子边缘检测算法

边缘检测是一种将图片中关键信息表现出来的一种图片技术&#xff0c;它的结果并不是字面意思上的获取图片边缘&#xff0c;而是将图片有用的信息勾勒出来&#xff0c;类似素描的结果&#xff0c;但是已经去掉了很多信息。如下所示&#xff0c;一张原始的图片是这样的&#xff1…

李沐动手学习深度学习 2023年Win10 下安装 CUDA 和 Pytorch 跑深度学习(最新)

目录 一、安装Anaconda 1.下载Anaconda 测试是否安装成功 二、安装pytorch 验证pytorch是否安装成功 4.测试 3.配置pycharm 一、安装Anaconda 1.下载Anaconda 可以在官网下载&#xff0c;但是速度较慢&#xff0c;这里我选择了清华镜像源的下载 https://mirrors.tuna.t…

chatgpt赋能python:Python列表倒序排序

Python列表倒序排序 Python是一种高级编程语言&#xff0c;被广泛用于各种领域的应用程序开发中&#xff0c;包括数据科学和机器学习。Python语言自带许多强大的编程工具&#xff0c;其中列表是其中最基础的数据结构之一。它可以让程序员整理和管理大量的数据&#xff0c;在实…

RISC-V IDE MRS使用笔记(八):实现局域网下的远程调试功能

RISC-V IDE MRS使用笔记(八)&#xff1a;实现局域网下的远程调试功能 1.原理介绍 MRS调试时上位机与硬件的通信基于gdb客户端与服务端的连接。调试时&#xff0c;首先启动openocd以挂载gdbserver的服务到指定端口上。通信建立后&#xff0c;监听到界面操作后以gdb指令的形式发…

用于ECharts的全国省市区县乡镇街道级的行政区划边界数据(GeoJSON格式)

https://map.vanbyte.com 提供了免费的省市县3级行政边界数据(GeoJSON格式)、省市县乡4级联动数据。 至于行政区划边界数据的来源&#xff0c;网络上有各种教程。授人以鱼不如授人以渔&#xff0c;下面记录一下各类方法的具体步骤。 来源1&#xff1a;阿里云的数据可视化平台…

Makerbase SimpleFOC ESP32 例程3 I²C双编码器测试(AS5600)

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

Ai作画区域控制的几种方法

背景 距上次发文章&#xff0c;又过去好久。这期分享给大家带来的是Ai作画的图结构控制几种方法。现在大家用AI作画大部分情况是直接使用AI单图生成能力&#xff0c;其实并不太会取考虑构图&#xff0c;也不太会考虑到大图的图结构这件事。其实构图这件事是一件很综合复杂的事…

冒泡排序Java实现

冒泡排序的时间复杂度为O(n^2) package com.qianfeng.homework;import java.util.Arrays;public class BubbleSort {public static void bubbleSort(int[] nums){for (int i 0; i < nums.length-1; i) {for (int j 0; j < nums.length-i-1; j) {if(nums[j] > nums[…

Node.js+vue多用户个人博客网站i03nz

基于nodejs语言设计并实现了个人博客。该系统基于B/S即所谓浏览器/服务器模式&#xff0c;应用Vue框架&#xff0c;选择MySQL作为后台数据库。系统主要包括首页、个人中心、用户管理、文章分类管理、博客文章管理、留言板管理、系统管理等功能模块。要循序渐进&#xff0c;心急…

一文读懂MVCC:数据库中的并发读写利器!

大家好&#xff0c;我是你们的小米&#xff0c;一个积极活泼、喜好分享技术的小伙伴。今天&#xff0c;我想和大家聊一聊数据库领域的一个重要话题——MVCC多版本并发控制。MVCC是MySQL和其他一些数据库系统中常用的并发控制技术&#xff0c;通过它&#xff0c;我们可以在高并发…

Elasticsearch文件存储

分析Elasticsearch Index文件是如何存储的&#xff1f; 主要是想看一下FST文件是以什么粒度创建的&#xff1f; 首先通过kibana找一个索引的shard&#xff0c;此处咱们就以logstash-2023.05.30索引为例 查看下shard分布情况 GET /_cat/shards/logstash-2023.05.30?vindex …

tcp shrinking window 之进退

一个有趣的问题&#xff1a;Unbounded memory usage by TCP for receive buffers, and how we fixed it 引出一个 kernel patch&#xff1a;[PATCH] Add a sysctl to allow TCP window shrinking in order to honor memory limits 但这 patch 把一个问题变成了两个问题&#…