vue3知识点:Suspense组件

vue3知识点:Suspense组件_第1张图片

文章目录

  • 五、新的组件
    • 3.Suspense
      • 案例
      • 完整代码
  • 本人其他相关文章链接

五、新的组件

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行等你你引入成功使用呢。
vue3知识点:Suspense组件_第2张图片

如图1

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

答案:如图2,只要最里面的小红色框加载慢了,那么它外部的所有人都会等最内部红色框加载完成后再去加载,外部所有人都跟着受影响。即:什么时候展示取决于最慢的那个人。
vue3知识点:Suspense组件_第3张图片

如图2

注意点3:

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

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

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

其中:插槽的2个名字不可以修改,只能用这个:v-slot:default和v-slot:fallback