React?代碼拆分的幾種方法示例詳解
前沿
當(dāng)我們項(xiàng)目越來越大的時候,代碼的體積會變得龐大,導(dǎo)致我們項(xiàng)目的加載速度變慢,特別是如果您包含大型第三方庫。您需要密切關(guān)注包含在bundle
中的代碼,以免我們的項(xiàng)目體積太大,導(dǎo)致加載時間長,影響用戶體驗(yàn)。在React項(xiàng)目中,我們可以通過以下幾種方式對代碼進(jìn)行拆分,可以將代碼拆分成小的塊。讓我們的網(wǎng)站速度變快。
動態(tài)加載(import)
es6提供import()函數(shù),它是運(yùn)行時執(zhí)行,也就是說,什么時候運(yùn)行到這一句,就會加載指定的模塊。
import()返回一個 Promise 對象。在React中,我們可以這樣去做。通過打包工具,會在打包的過程中對PageModuels
生成單獨(dú)的文件,在運(yùn)行的時候異步加載
import React, { useState, useEffect } from 'react'; const Index = () => { const [Cmp, setCmp] = useState(null); useEffect(() => { import('./PageModules').then((mod) => setCmp(mod.default)); }, []); return Cmp ? <Cmp /> : <div>Loading...</div>; };
loadable component
Loadable Components是一個高階組件,允許您將代碼拆分為更小的塊并按需加載,支持服務(wù)端渲染,使用方式比較簡單。
import loadable from '@loadable/component' const OtherComponent = loadable(() => import('./OtherComponent')) function MyComponent() { return ( <div> <OtherComponent /> </div> ) }
它和我們接下來要介紹的React.lazy
還有些區(qū)別,可參考 loadable-components.com/docs/loadab…
React Lazy 和 React Suspense
React Lazy是react官方提供的解決方案,非常推薦使用該方案去做代碼拆分.需要React.Suspense
配合, 該組件可以指定加載指示器(loading indicator),以防其組件樹中的某些子組件尚未具備渲染條件。使用方式如下
// 該組件是動態(tài)加載的 const OtherComponent = React.lazy(() => import('./OtherComponent')); function MyComponent() { return ( // 顯示 <Spinner> 組件直至 OtherComponent 加載完成 <React.Suspense fallback={<Spinner />}> <div> <OtherComponent /> </div> </React.Suspense> ); }
參考
結(jié)束語
如果是新的項(xiàng)目且不需要服務(wù)端渲染,推薦使用React.lazy
。如果需要服務(wù)端渲染的話,推薦使用loadable component
。小伙伴們可以分析下你們項(xiàng)目的依賴,把一些模塊拆成獨(dú)立的模塊,減少代碼體積。
以上就是React 代碼拆分的幾種方法示例詳解的詳細(xì)內(nèi)容,更多關(guān)于React 代碼拆分的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
react路由守衛(wèi)的實(shí)現(xiàn)(路由攔截)
react不同于vue,通過在路由里設(shè)置meta元字符實(shí)現(xiàn)路由攔截。本文就詳細(xì)的介紹一下,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08解讀useState第二個參數(shù)的"第二個參數(shù)"
這篇文章主要介紹了useState第二個參數(shù)的"第二個參數(shù)",具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03React Hooks與setInterval的踩坑問題小結(jié)
本文主要介紹了React Hooks與setInterval的踩坑,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04react中關(guān)于函數(shù)調(diào)用()與bind this的原因及分析
這篇文章主要介紹了react中關(guān)于函數(shù)調(diào)用()與bind this的原因及分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02React Native時間轉(zhuǎn)換格式工具類分享
這篇文章主要為大家分享了React Native時間轉(zhuǎn)換格式工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10用React實(shí)現(xiàn)一個完整的TodoList的示例代碼
本篇文章主要介紹了用React實(shí)現(xiàn)一個完整的TodoList的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10