如何快速入門VUE3.0:進入學習
這個特性在React歷史版本中的出現,第一次是16.6版本,發布了支援程式碼拆分的Suspense
元件。在16.9版本中繼而支援了資料擷取。有興趣的同學可以移步React
的changelog
。
前文有介紹,我們只用一個例子來溫顧下概念和使用
// 這個元件是動態載入的const OtherComponent = React.lazy(() => import('./OtherComponent')); function MyComponent() { return ( <React.Suspense fallback={<Spinner />}> <div> <OtherComponent /> </div> </React.Suspense> ); }
在OtherComponent
元件尚不具備渲染條件的時候,會用fallback
傳入的元件進行預製渲染。這邊不具備渲染條件的具體表現就是資料取得時間較長,元件結構複雜等,但是不想因為這些影響應用的首屏渲染或初始化,之前的Suspense
的文章有介紹,不再贅述。
從字面上的意思就能夠簡單的理解,就是如果我們的程式碼中有多個Suspense
存在,我們該怎麼控制它們的展示順序和展示方式呢?由此React
官方提供了SuspenseList
元件給我們。
<SuspenseList revealOrder="forwards"> <Suspense fallback={'加載中...'}> <ProfilePicture id={1} /> </Suspense> <Suspense fallback={'加載中...'}> <ProfilePicture id={2} /> </Suspense> <Suspense fallback={'加載中...'}> <ProfilePicture id={3} /> </Suspense> …… </SuspenseList>
我們先介紹下SuspenseList
僅有的兩個Props
revealOrder
表示的是子Suspense
的載入順序,可選值有forwards
, backwards
, together
forwards
表示同一層次,從前往後展示,無論請求速度都是前面的先展示
backwards
跟forwards相反
together
表示所有suspense都準備好後同時顯示,而不是一個個顯示tail
指定如何顯示SuspenseList
中未加載項目的行為
默認情況下, SuspenseList
將顯示列表中的所有fallback
collapsed
僅顯示列表中下一個fallback
hidden
未載入的項目不顯示任何資訊
ps: SuspenseList
只對直接子層級的Suspense
或SuspenseList
起作用,不會對孫子節點起作用。
SuspenseList
讓我們可以對一組Suspense
的行為進行複合編排,雖然在演示中的demo相對比較簡單,但是如果在一個比較大型的項目中,我們經常會使用Layout
進行佈局。就拿我們常見的中後端管理平台來說和C端主體頁面來舉例。
中後端系統中,我們經常使用頂欄+側邊欄+主體頁面的方式來佈局,在這一層面目前業界,實踐微前端的套路居多,例如qiankun.js
,包括筆者所在的團隊,也探索了一套自己的微前端實現體系。如果在C端頁面,採用微前端的方式可能未必合適,在頁面中存在多區塊渲染等需求上,利用SuspenseList
和Suspense
結合React後端渲染SSR的能力,就能夠較系統的實現獨立區塊的載入順序和行為的效果。