vue3知识点:Suspense组件

2023-11-18

在这里插入图片描述

五、新的组件

3.Suspense

  • 等待异步组件时渲染一些额外内容,让应用有更好的用户体验

  • 使用步骤:

第1步:异步引入组件

import {defineAsyncComponent} from 'vue'
const Child = defineAsyncComponent(()=>import('./components/Child.vue'))

第2步:使用Suspense包裹组件,并配置好defaultfallback

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

注意点1:

静态引入,当网速调低时,两个组件仍然同步出现

import Child from './components/Child'//静态引入

在这里插入图片描述

如图:静态引入-两组件同步出现.gif

异步引入,当网速调低时,两个组件出现时间有先后

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

在这里插入图片描述

如图:异步引入-两组件出现时间有先后.gif

注意点2:
总结:静态引入会一直等加载完成外部才加载渲染,而异步引入会按加载时间先后顺序展示,效果更好些。

问题1:静态引入和异步引入区别是啥?

答案:对于静态引入方式来说,只要如图1中第9行没引入成功,那么2-5行的整个div元素都不会渲染,因为第4行等你你引入成功使用呢。
在这里插入图片描述

如图1

问题2:如果都用静态引入会引发什么问题呢?

答案:如图2,只要最里面的小红色框加载慢了,那么它外部的所有人都会等最内部红色框加载完成后再去加载,外部所有人都跟着受影响。即:什么时候展示取决于最慢的那个人。
在这里插入图片描述

如图2

注意点3:

问题:异步引入虽然好些,但是它也存在一个小小的问题

答案:显示会抖动,比如正常会显示2个div,但用户不知道会显示几个,当网速慢只显示出来1个的时候,用户以为显示完了,结果歘一下又蹦出来一个div,这就叫抖动效果,明显不友好。因此使用Suspense就可以解决这个异步显示有先后的问题。

注意点4:
这个Suspense就相当于插槽,人家给你提供了2个插槽,其中第1个插槽用于展示你真正想展示的内容,而第2个插槽用来展示你内容还没加载出来时候的替代展示内容。

其中:插槽的2个名字不可以修改,只能用这个:v-slot:default和v-slot:fallback
<template v-slot:default> 中间报过你真正想展示的内容
<template v-slot:fallback> 用于展示未加载完成时替代展示的内容

注意点5:
让你的组件等一等再加载,有2种方法:

方法1:使网速变慢,且使用Suspense异步加载

<Suspense>
	<template v-slot:default>
		<Child/>
	</template>
	<template v-slot:fallback>
		<h3>稍等,加载中...</h3>
	</template>
</Suspense>

方法2:使用Promise

async setup(){
	let sum = ref(0)
	let p = new Promise((resolve,reject)=>{
		setTimeout(()=>{
			resolve({sum})
		},3000)
	})
	return await p
}

案例

完整代码

项目结构

在这里插入图片描述

main.js

//引入的不再是Vue构造函数了,引入的是一个名为createApp的工厂函数
import { createApp } from 'vue'
import App from './App.vue'

//创建应用实例对象——app(类似于之前Vue2中的vm,但app比vm更“轻”)
const app = createApp(App)

//挂载
app.mount('#app')

App.vue

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

<script>
	// import Child from './components/Child'//静态引入
	import {defineAsyncComponent} from 'vue' 
	const Child = defineAsyncComponent(()=>import('./components/Child')) //异步引入
	export default {
		name:'App',
		components:{Child},
	}
</script>

<style>
	.app{
		background-color: gray;
		padding: 10px;
	}
</style>

Child.vue

<template>
	<div class="child">
		<h3>我是Child组件</h3>
		{{sum}}
	</div>
</template>

<script>
	import {ref} from 'vue'
	export default {
		name:'Child',
		async setup(){
			let sum = ref(0)
			let p = new Promise((resolve,reject)=>{
				setTimeout(()=>{
					resolve({sum})
				},3000)
			})
			return await p
		}
	}
</script>

<style>
	.child{
		background-color: skyblue;
		padding: 10px;
	}
</style>

结果展示:

在这里插入图片描述

本人其他相关文章链接

1.《vue3第五章》新的组件,包含:Fragment、Teleport、Suspense
2.vue3知识点:Teleport组件
3.vue3知识点:Suspense组件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3知识点:Suspense组件 的相关文章

随机推荐

  • clang+llvm+linux x86平台交叉编译arm64

    下载工具链 bin bash workPATH pwd toolchain mkdir p workPATH cd workPATH URL LLVM https github com llvm llvm project releases
  • 算法训练营第十一天(7.22)

    目录 LeeCode20 Valid Parentheses LeeCode1047 Remove All Adjacent Duplicates In String LeeCode150 Evaluate Reverse Polish N
  • 第三章 3.1节练习 & 3.2.2节练习

    练习3 1 使用恰当的using声明重做1 4 1节 11页 和2 6 2节 67页 的练习 解答 这里就不写代码了 因为可以using命名空间或者空间中的对应函数 可以出现很多种组合 可以按照自己喜欢或熟悉的方式来写 练习3 2 编写一段
  • python 面向对象 超级详细全面讲解

    如有错误 欢迎留言指出讨论 1 面向对象和面向过程 1 1 面向过程注重的是结果 从结果出发去考虑问题的实现步骤 1 2 面向对象注重的是设计 从现实生活的角度 从设计的角度去考虑问题的实现步骤 1 3 虽然2种思想的目的都是为了做出一个程
  • 00后视频审核员,3个月顺利转行车载测试,他说你也能行!

    21年夏天毕业后 自觉比较社恐的我去找了一份看似清闲又不用和逼人打交道太多的工作 原本以为这份工作会成为我的庇佑所 没想到也是一地鸡毛 是的 我是一个视频审核 顾名思义 作为一个视频审核员 毫无疑问我的工作就是看视频 也许有人会说 就看看视
  • numpy中np.array()功能

    功能 将数据转化为矩阵 a 1 2 3 4 5 6 7 8 9 b np array a c np asarray a a 2 1 print a print b print c 从中我们可以看出np array与np asarray功能是
  • JAVA并发队列

    Java并发队列 在并发队列上JDK提供了两套实现 一个是以ConcurrentLinkedQueue为代表的高性能队列 一个是以BlockingQueue接口为代表的阻塞队列 无论哪种都继承自Queue 一 ConcurrentLinke
  • 【Hbase 05】Hbase表的设计原则与优化方案

    这里说一下Hbase在使用过程中的表设计原则与优化方案 如果你是运维或者开发兼顾环境的工作 也许比较受用 话不多说 我们直接开始说优化的内容 一 表设计原则 1 行键设计 行键在设计的时候要尽量的散列 例如可以考虑使用哈希 加密算法等使结果
  • 在Webpack 5 中如何进行 CSS 常用配置?

    本文摘要 主要通过实操讲解运用Webpack 5 CSS常用配置的方法步骤 前文已谈到可以通过配置 css loader 和 style loader 使 webpack5 具有处理 CSS 资源的能力 css loader 首先会分析出各
  • 【线性代数】向量组的线性相关性

    文章目录 向量组及其线性组合 一 向量 二 线性表示 1 线性组合的定义 2 线性表示的定义 3 线性表示的充要条件 三 向量组等价 1 向量组等价定义 2 向量组线性表示的充要条件 3 向量组等价的充要条件 4 向量组线性表示的必要条件
  • 如何设计企业节点的『工业互联网标识解析系统』

    一 星火 链网 体系架构 星火 链网 以节点形式进行组织互联互通 其中包括三类节点 超级节点 骨干节点 业务节点 其底层采用 1 N 主从链群架构 支持同构和异构区块链接入主链 在全国重点区域部署 星火 链网 超级节点 作为国家链网顶层 提
  • Waffle使用初体验

    一 什么是Waffle Waffle是什么呢 我们直接看其文档上的介绍 Waffle is a library for writing and testing smart contracts Sweeter simpler and fast
  • 主要进行OGRE引擎和shader

    今天 老大告诉我 只要把GLSL进行就行了 其余不用管 那就与OGRE相结合 轮流进行即可 看看引擎架构 搞搞shader
  • HDC即将开始,有哪些亮点值得期待?

    鸿蒙新版本即将发布 开发者该如何紧跟生态热点 最重磅的当然是HarmonyOS 3 1beta版本将于11月4日在华为开发者大会2022 HDC 现场宣布发布 代表着鸿蒙生态新的征程 除正式发布外 最近华为开发者学堂已经上线的一些鸿蒙生态相
  • 北大硕士7年嵌入式学习经验分享

    01 前言 大家现在状态是怎么样的 这几年技术进步怎么样 职场晋升 管理水平有没有提升 欢迎留言 本文内容来自于知乎 觉得内容很不错 分享给大家 下文的我代表的是原作者 作者 梦人亦冷 链接 https www zhihu com ques
  • 数据库查询语句

    数据库查询语句无疑是所有语句中 最重要的语句 经常配合where一起使用 1 最基本的查询 公式1 select from 表名 查看aaa表中的所有数据 SELECT FROM aaa 你说 我不想查看表中所有的数据 我就想查看表中id字
  • Python进行大数据挖掘和分析

    大数据无处不在 在时下这个年代 不管你喜欢与否 在运营一个成功的商业的过程中都有可能会遇到它 什么是大数据 大数据就像它看起来那样 有大量的数据 单独而言 你能从单一的数据获取的洞见穷其有限 但是结合复杂数学模型以及强大计算能力的TB级数据
  • 中国大陆网站TOP100

    1 新浪新闻中心 包括即日的国内外不同类型的新闻与评论 人物专题 图库 BR www sina com cn 2 Baidu com 全球最大中文搜索引擎 向人们提供简单 可依赖的信息获取方式 BR www baidu com 3 搜狐 资
  • VMware Vsphere-下

    18 创建资源池和vAPPs 主机右击可以看到 新建资源池 资源池里可以指定资源池所消耗的物理的cpu和内存 份额 预留 限制 资源池里面可以放虚拟机 资源池的作用 可以将几台虚拟机放进一个池 限制资源 这样就不会出现一个虚拟机抢占过多资源
  • vue3知识点:Suspense组件

    文章目录 五 新的组件 3 Suspense 案例 完整代码 本人其他相关文章链接 五 新的组件 3 Suspense 等待异步组件时渲染一些额外内容 让应用有更好的用户体验 使用步骤 第1步 异步引入组件 import defineAsy