Vue3異步組件Suspense的使用方法詳解
Suspense組件
官網(wǎng)中有提到他是屬于實(shí)驗(yàn)性功能:<Suspense> 是一項(xiàng)實(shí)驗(yàn)性功能。它不一定會(huì)最終成為穩(wěn)定功能,并且在穩(wěn)定之前相關(guān) API 也可能會(huì)發(fā)生變化。<Suspense> 是一個(gè)內(nèi)置組件,用來(lái)在組件樹(shù)中協(xié)調(diào)對(duì)異步依賴的處理。它讓我們可以在組件樹(shù)上層等待下層的多個(gè)嵌套異步依賴項(xiàng)解析完成,并可以在等待時(shí)渲染一個(gè)加載狀態(tài)。
意思就是此組件用來(lái)等待異步組件時(shí)渲染一些額外內(nèi)容,讓?xiě)?yīng)用有更好的用戶體驗(yàn)
要了解 <Suspense> 所解決的問(wèn)題和它是如何與異步依賴進(jìn)行交互的,我們需要想象這樣一種組件層級(jí)結(jié)構(gòu):
<Suspense>
└─ <Dashboard>
├─ <Profile>
│ └─ <FriendStatus>(組件有異步的 setup())
└─ <Content>
├─ <ActivityFeed> (異步組件)
└─ <Stats>(異步組件)
在這個(gè)組件樹(shù)中有多個(gè)嵌套組件,要渲染出它們,首先得解析一些異步資源。如果沒(méi)有 <Suspense>,則它們每個(gè)都需要處理自己的加載、報(bào)錯(cuò)和完成狀態(tài)。在最壞的情況下,我們可能會(huì)在頁(yè)面上看到三個(gè)旋轉(zhuǎn)的加載態(tài),在不同的時(shí)間顯示出內(nèi)容。
有了 <Suspense> 組件后,我們就可以在等待整個(gè)多層級(jí)組件樹(shù)中的各個(gè)異步依賴獲取結(jié)果時(shí),在頂層展示出加載中或加載失敗的狀態(tài)。
接下來(lái)看個(gè)簡(jiǎn)單的例子:
首先需要引入異步組件
import {defineAsyncComponent} from 'vue'
const Child = defineAsyncComponent(()=>import('./components/Child.vue'))
簡(jiǎn)潔一些就是用組件實(shí)現(xiàn)異步的加載的這么一個(gè)效果
Home父組件代碼如下:
<template>
<div class="home">
<h3>我是Home組件</h3>
<Suspense>
<template #default>
<Child />
</template>
<template v-slot:fallback>
<h3>Loading...</h3>
</template>
</Suspense>
</div>
</template>
<script >
// import Child from './components/Child'//靜態(tài)引入
import { defineAsyncComponent } from "vue";
const Child = defineAsyncComponent(() => import("../components/Child"));
export default {
name: "",
components: { Child },
};
</script>
<style>
.home {
width: 300px;
background-color: gray;
padding: 10px;
}
</style>
自組件Child
<template>
<div class="child">
<h3>我是Child組件</h3>
name: {{user.name}}
age: {{user.age}}
</div>
</template>
<script>
import { ref } from "vue";
export default {
name: "Child",
async setup() {
const NanUser = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({
name: "NanChen",
age: 20,
});
},2000);
});
};
const user = await NanUser();
return {
user,
};
},
};
</script>
<style>
.child {
background-color: skyblue;
padding: 10px;
}
</style>
根據(jù)插槽機(jī)制,來(lái)區(qū)分組件, #default 插槽里面的內(nèi)容就是你需要渲染的異步組件; #fallback 就是你指定的加載中的靜態(tài)組件。
效果如下:
到此這篇關(guān)于Vue3異步組件Suspense的使用方法詳解的文章就介紹到這了,更多相關(guān)Vue3異步組件Suspense的使用方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
element-ui樹(shù)形控件后臺(tái)返回的數(shù)據(jù)+生成組織樹(shù)的工具類
這篇文章主要介紹了element-ui樹(shù)形控件后臺(tái)返回的數(shù)據(jù)+生成組織樹(shù)的工具類,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
vue使用watch監(jiān)聽(tīng)props的技巧分享
這篇文章主要為大家詳細(xì)介紹了vue使用watch監(jiān)聽(tīng)props的一些小建議,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
vue3實(shí)現(xiàn)自定義導(dǎo)航菜單的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何使用vue3實(shí)現(xiàn)自定義導(dǎo)航菜單,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
vue3實(shí)現(xiàn)模擬地圖站點(diǎn)名稱按需顯示的功能(車(chē)輛模擬地圖)
最近在做車(chē)輛模擬地圖,在實(shí)現(xiàn)控制站點(diǎn)名稱按需顯示,下面通過(guò)本文給大家分享vue3實(shí)現(xiàn)模擬地圖站點(diǎn)名稱按需顯示的功能,感興趣的朋友跟隨小編一起看看吧2024-06-06
說(shuō)說(shuō)Vuex的getters屬性的具體用法
這篇文章主要介紹了說(shuō)說(shuō)Vuex的getters屬性的具體用法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04
vue3?element?plus?table?selection展示數(shù)據(jù),默認(rèn)選中功能方式
這篇文章主要介紹了vue3?element?plus?table?selection展示數(shù)據(jù),默認(rèn)選中功能方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
為vue-router懶加載時(shí)下載js的過(guò)程中添加loading提示避免無(wú)響應(yīng)問(wèn)題
這篇文章主要介紹了為vue-router懶加載時(shí)下載js的過(guò)程中添加loading提示避免無(wú)響應(yīng)問(wèn)題,需要的朋友可以參考下2018-04-04
VsCode工具開(kāi)發(fā)vue項(xiàng)目必裝插件清單(推薦!)
對(duì)于很多使用vscode編寫(xiě)vue項(xiàng)目的新手同學(xué)來(lái)說(shuō),可能不知道使用什么插件,下面這篇文章主要給大家介紹了關(guān)于VsCode工具開(kāi)發(fā)vue項(xiàng)目必裝插件的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09

