自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Vue3 用戶體驗(yàn)的增加:異步組件與 Suspense 組件

開發(fā)
懶加載組件是一種改善應(yīng)用程序用戶體驗(yàn)的簡(jiǎn)便方法,尤其是在我們的代碼包很大或用戶連接速度較慢的情況下。

[[400030]]

懶加載組件是一種改善應(yīng)用程序用戶體驗(yàn)的簡(jiǎn)便方法,尤其是在我們的代碼包很大或用戶連接速度較慢的情況下。

Vue3引入了一些新功能,可通過(guò)改進(jìn)異步組件API和新的Suspense組件來(lái)幫助我們實(shí)現(xiàn)友好的用戶體驗(yàn)。

用戶訪問(wèn)應(yīng)用程序時(shí),無(wú)需立即加載UI的某些部分,例如,諸如模態(tài)框和工具提示之類的動(dòng)態(tài)UI功能。此外,如果我們使用的是單頁(yè)面應(yīng)用程序體系結(jié)構(gòu),則頁(yè)面上的內(nèi)容 看不見的頁(yè)面也不應(yīng)加載,直到需要為止。

示例

在此示例應(yīng)用程序中,我們的應(yīng)用程序顯示一個(gè)ChatWindow組件,如果用戶經(jīng)過(guò)身份驗(yàn)證,該組件將加載。

我們假設(shè)只能在運(yùn)行時(shí)確定身份驗(yàn)證,并且該組件很大。由于這些原因,我們需要要懶加載它。

  1. <template> 
  2.   <h3>Chat with friends here</h3> 
  3.   <chat-window v-if="auth" /> 
  4. </template> 
  5. <script> 
  6. import ChatWindow from "@/components/ChatWindow"
  7.  
  8. export default { 
  9.   components: { 
  10.     ChatWindow 
  11.   }, 
  12.   ... 
  13. </script> 

 

使用Vue3異步組件API進(jìn)行懶加載

Vue 3引入了defineAsyncComponent API,所以實(shí)現(xiàn)懶加載組件是非常簡(jiǎn)單的。

defineAsyncComponent 可以接受一個(gè)返回 Promise 的工廠函數(shù)。Promise 的 resolve 回調(diào)應(yīng)該在服務(wù)端返回組件定義后被調(diào)用。你也可以調(diào)用 reject(reason) 來(lái)表示加載失敗。

  1. <script> 
  2. import { defineAsyncComponent } from "vue"
  3.  
  4. const ChatWindow = defineAsyncComponent( 
  5.   () => import("@/components/ChatWindow"
  6. ); 
  7.  
  8. export default { 
  9.   components: { 
  10.     ChatWindow 
  11.   }, 
  12.   ... 
  13. </script> 

 

構(gòu)建后,任何動(dòng)態(tài)導(dǎo)入的組件都會(huì)作為一個(gè)單獨(dú)的文件。

  1. File                                 Size 
  2.  
  3. dist/js/chunk-vendors.f11402df.js    82.39 KiB 
  4. dist/js/app.ada103fb.js              20.59 KiB 
  5. dist/js/ChatWindow.3c1708e4.js       5.47 KiB 
  6. dist/css/app.8221c481.css            1.76 KiB 
  7. dist/css/ChatWindow.f16731cd.css     2.75 KiB 

loading-state 內(nèi)容

懶加載的缺點(diǎn)是需要團(tuán)隊(duì)交流,多次請(qǐng)求造成渲染參差不齊。處理此問(wèn)題的一種方法加載組件時(shí)顯示 loading-state組件。

如下圖所示,組件在加載時(shí),我們顯示一個(gè) loading 畫面,加載后在顯示加載的組件內(nèi)容。

defineAsyncComponent 可以接受一個(gè)對(duì)象:其中有個(gè) loadingComponent 屬性,表示加載異步組件時(shí)要使用的組件。

 

與 Suspense 一起使用

上面使用loading-state的方法效果是挺好的,但有一點(diǎn)限制。例如,我們可能希望將prop傳遞到加載狀態(tài)組件,將內(nèi)容傳遞到其插槽等,而使用異步組件API則不容易實(shí)現(xiàn)。

為了增加靈活性,我們可以使用Vue3中新出Suspense組件。這使我們能夠使用插槽確定模板級(jí)別的異步加載內(nèi)容。

Suspense 是全局組件(例如transition),可以在Vue 3應(yīng)用程序中的任何位置使用。要使用它,需要在模板中聲明它,并包括兩個(gè)命名的插槽:default和fallback。

Suspense 會(huì)確保在加載異步內(nèi)容時(shí)顯示默認(rèn)插槽,并將fallback 插槽用作加載狀態(tài)。

  1. <template> 
  2.   <Suspense> 
  3.     <template #default
  4.       <h3>Chat with friends here</h3> 
  5.       <chat-window /> 
  6.     </template> 
  7.     <template #fallback> 
  8.       <spinner color="blue" /> 
  9.     </template> 
  10.   </Suspense> 
  11. </template> 
  12. <script> 
  13. import { defineAsyncComponent } from "vue"
  14. import Spinner from "@/components/Spinner.vue"
  15.  
  16. const ChatWindow = defineAsyncComponent( 
  17.   () => import("@/components/ChatWindow"
  18. ); 
  19.  
  20. export default { 
  21.   components: { 
  22.     ChatWindow, 
  23.     Spinner 
  24.   }, 
  25.   ... 
  26. </script> 

 

異步組件在默認(rèn)情況下是可掛起的。這意味著如果它在父鏈中有一個(gè) ,它將被視為該 的異步依賴。在這種情況下,加載狀態(tài)將由 控制,組件自身的加載、錯(cuò)誤、延遲和超時(shí)選項(xiàng)都將被忽略。

異步組件可以選擇退出 Suspense 控制,并可以在其選項(xiàng)中指定 suspensible:false,讓組件始終控制自己的加載狀態(tài)。

你可以在 API 參考查看更多可用的選項(xiàng)。

~完,我是小智,去SPA了,下期見!

作者:Matt Maribojoc 譯者:前端小智 來(lái)源:stackabuse

原文:https://vuejsdevers.com/2020/07/13/vue-async-components-suspense/

本文轉(zhuǎn)載自微信公眾號(hào)「大遷世界」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系大遷世界公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 大遷世界
相關(guān)推薦

2024-03-13 08:37:18

Vue3Suspense異步組件

2021-09-29 11:33:19

異步組件Vue 3

2024-08-13 09:26:07

2020-09-16 06:12:30

Vue.js 3.0Suspense組件前端

2020-12-01 08:34:31

Vue3組件實(shí)踐

2022-04-26 05:55:06

Vue.js異步組件

2023-04-02 10:06:24

組件vue3sign2.

2022-07-29 11:03:47

VueUni-app

2023-04-27 11:07:24

Setup語(yǔ)法糖Vue3

2022-07-27 08:40:06

父子組件VUE3

2021-05-06 07:40:56

Vue3 Vue2 組件

2022-09-20 11:00:14

Vue3滾動(dòng)組件

2024-07-10 08:39:49

2020-03-25 18:23:07

Vue2Vue3組件

2022-03-11 12:31:04

Vue3組件前端

2024-01-23 09:15:33

Vue3組件拖拽組件內(nèi)容編輯

2024-05-24 08:37:46

2021-05-12 10:25:53

組件驗(yàn)證漏洞

2022-08-26 10:01:48

Vue3TS

2022-07-27 11:59:45

Vue3Suspense
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)