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)容,讓應(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)文章
el-select如何獲取當(dāng)前選中的對(duì)象所有(item)數(shù)據(jù)
在開(kāi)發(fā)業(yè)務(wù)場(chǎng)景中我們通常遇到一些奇怪的需求,下面這篇文章主要給大家介紹了關(guān)于el-select如何獲取當(dāng)前選中的對(duì)象所有(item)數(shù)據(jù)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11vue+elementUI的select下拉框回顯為數(shù)字問(wèn)題
這篇文章主要介紹了vue+elementUI的select下拉框回顯為數(shù)字問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06vue解決this.$refs.xx在mounted中獲取DOM元素為undefined問(wèn)題
這篇文章主要介紹了vue解決this.$refs.xx在mounted中獲取DOM元素為undefined問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03django簡(jiǎn)單的前后端分離的數(shù)據(jù)傳輸實(shí)例 axios
這篇文章主要介紹了django簡(jiǎn)單的前后端分離的數(shù)據(jù)傳輸實(shí)例 axios,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05vue項(xiàng)目因內(nèi)存溢出啟動(dòng)報(bào)錯(cuò)的解決方案
這篇文章主要介紹了vue項(xiàng)目因內(nèi)存溢出啟動(dòng)報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09Element實(shí)現(xiàn)登錄+注冊(cè)的示例代碼
登錄注冊(cè)是最常用的網(wǎng)站功能,本文主要介紹了Element實(shí)現(xiàn)登錄+注冊(cè)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09npm install sentry-cli失敗的問(wèn)題解決
本文主要介紹了npm install sentry-cli失敗的問(wèn)題解決,文章首先描述了問(wèn)題現(xiàn)象,然后分析了問(wèn)題的原因,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08Vue中判斷語(yǔ)句與循環(huán)語(yǔ)句基礎(chǔ)用法及v-if和v-for的注意事項(xiàng)詳解
在Vue指令中,最經(jīng)常被用于做邏輯操作的指令,下面這篇文章主要給大家介紹了關(guān)于Vue中判斷語(yǔ)句與循環(huán)語(yǔ)句基礎(chǔ)用法及v-if和v-for注意事項(xiàng)的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08