您好,登錄后才能下訂單哦!
今天小編給大家分享一下Vue3異步組件Suspense怎么使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
官網中有提到他是屬于實驗性功能:<Suspense>
是一項實驗性功能。它不一定會最終成為穩定功能,并且在穩定之前相關 API 也可能會發生變化。<Suspense>
是一個內置組件,用來在組件樹中協調對異步依賴的處理。它讓我們可以在組件樹上層等待下層的多個嵌套異步依賴項解析完成,并可以在等待時渲染一個加載狀態。
意思就是此組件用來等待異步組件時渲染一些額外內容,讓應用有更好的用戶體驗
要了解 <Suspense>
所解決的問題和它是如何與異步依賴進行交互的,我們需要想象這樣一種組件層級結構:
<Suspense> └─ <Dashboard> ├─ <Profile> │ └─ <FriendStatus>(組件有異步的 setup()) └─ <Content> ├─ <ActivityFeed> (異步組件) └─ <Stats>(異步組件)
在這個組件樹中有多個嵌套組件,要渲染出它們,首先得解析一些異步資源。如果沒有 <Suspense>
,則它們每個都需要處理自己的加載、報錯和完成狀態。在最壞的情況下,我們可能會在頁面上看到三個旋轉的加載態,在不同的時間顯示出內容。
有了 <Suspense>
組件后,我們就可以在等待整個多層級組件樹中的各個異步依賴獲取結果時,在頂層展示出加載中或加載失敗的狀態。
接下來看個簡單的例子:
首先需要引入異步組件
import {defineAsyncComponent} from 'vue' const Child = defineAsyncComponent(()=>import('./components/Child.vue'))
簡潔一些就是用組件實現異步的加載的這么一個效果
Home父組件代碼如下:
<template> <div class="home"> <h5>我是Home組件</h5> <Suspense> <template #default> <Child /> </template> <template v-slot:fallback> <h5>Loading...</h5> </template> </Suspense> </div> </template> <script > // import Child from './components/Child'//靜態引入 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"> <h5>我是Child組件</h5> 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>
根據插槽機制,來區分組件, #default 插槽里面的內容就是你需要渲染的異步組件; #fallback 就是你指定的加載中的靜態組件。
效果如下:
以上就是“Vue3異步組件Suspense怎么使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。