亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

React代碼分割的實(shí)現(xiàn)方法介紹

 更新時(shí)間:2022年12月03日 11:38:06   作者:碼農(nóng)小菲  
雖然一直有做react相關(guān)的優(yōu)化,按需加載、dll 分離、服務(wù)端渲染,但是從來(lái)沒(méi)有從路由代碼分割這一塊入手過(guò),所以下面這篇文章主要給大家介紹了關(guān)于React中代碼分割的方式,需要的朋友可以參考下

代碼分割

  • 打包是個(gè)很棒的技術(shù),但隨著代碼量的增加,容易出現(xiàn)體積過(guò)大而導(dǎo)致加載時(shí)間過(guò)長(zhǎng)。為避免這種情況的出現(xiàn),在前期就思考該問(wèn)題并對(duì)代碼包進(jìn)行分割是個(gè)不錯(cuò)的選擇。
  • 對(duì)應(yīng)用進(jìn)行代碼分割能夠幫助你“懶加載”當(dāng)前用戶所需要的內(nèi)容,提高應(yīng)用性能。盡管并沒(méi)有減少應(yīng)用整體的代碼體積,但可以避免加載用戶不需要的代碼,并在初始加載的時(shí)候減少所需加載的代碼量。
  • 簡(jiǎn)單理解:是性能優(yōu)化的一種解決方案。比如我們的路由系統(tǒng)中有100個(gè)組件,我們?cè)趓eact項(xiàng)目啟動(dòng)時(shí)不需要對(duì)這100個(gè)組件都進(jìn)行編譯,只編譯當(dāng)前URL對(duì)應(yīng)的組件,這就可以用到代碼分割的功能;

React.lazy&Suspense

  • 動(dòng)態(tài)引入
//使用前:
import OtherComponent from './OtherComponent';
//使用之后:
const OtherComponent = React.lazy(() => import('./OtherComponent'))
  • 在組件首次渲染時(shí),自動(dòng)導(dǎo)入包含該組件的包
  • React.lazy 接受一個(gè)函數(shù),這個(gè)函數(shù)需要?jiǎng)討B(tài)調(diào)用import()。它必須返回一個(gè)Promist,該P(yáng)romise 需要resolve 一個(gè)default export 的react組件
  • 然后應(yīng)在 Suspense 組件中渲染 lazy 組件,這樣可以在等待加載 lazy 組件時(shí)做優(yōu)雅降級(jí)(如 loading 指示器等)
   import React, { Suspense } from 'react';
   const  OtherComponent = React.lazy(() => import('./OtherComponent'))
   const AnotherComponent = React.lazy(() => import('./AnotherComponent'))
   function MyComponent() {
     return (
       <div>
        <Suspense fallback={<div>Loading...</div>}>
           <section>
             <OtherComponent />
             <AnotherComponent />
           </section>
         </Suspense>
       </div>
     );
   }
  • fallback:接受任何在組件加載過(guò)程中你想展示的 React 元素
  • Suspense 組件置于懶加載組件之上的任何位置

異常捕獲邊界(Error boundaries)

如果模塊加載失?。ㄈ缇W(wǎng)絡(luò)問(wèn)題),它會(huì)觸發(fā)一個(gè)錯(cuò)誤??梢酝ㄟ^(guò)異常捕獲邊界(Error boundaries)技術(shù)來(lái)處理這些情況,以顯示良好的用戶體驗(yàn)并管理恢復(fù)事宜。

import React, { Suspense } from 'react';
import MyErrorBoundary from './MyErrorBoundary';
const OtherComponent = React.lazy(() => import('./OtherComponent'));
const AnotherComponent = React.lazy(() => import('./AnotherComponent'));
const MyComponent = () => (
 <div>
   <MyErrorBoundary>
     <Suspense fallback={<div>Loading...</div>}>
       <section>
         <OtherComponent />
         <AnotherComponent />
       </section>
     </Suspense>
   </MyErrorBoundary>
 </div>
);

基于路由的代碼分割

可以選擇從路由開(kāi)始實(shí)現(xiàn)代碼分割。

import React, { Suspense, lazy } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const Home = lazy(() => import('./routes/Home'));
const About = lazy(() => import('./routes/About'));
const App = () => (
  <Router>
    <Suspense fallback={<div>Loading...</div>}>
      <Switch>
        <Route exact path="/" component={Home}/>
        <Route path="/about" component={About}/>
      </Switch>
    </Suspense>
  </Router>
);

命名導(dǎo)出(Named Exports)

  • React.lazy 目前只支持默認(rèn)導(dǎo)出(default exports)
  • 若導(dǎo)出其他模塊,可以創(chuàng)建一個(gè)中間模塊,來(lái)重新導(dǎo)出為默認(rèn)模塊
// ManyComponents.js
export const MyComponent = /* ... */;
export const MyUnusedComponent = /* ... */;
// MyComponent.js
export { MyComponent as default } from "./ManyComponents.js";
// MyApp.js
import React, { lazy } from 'react';
const MyComponent = lazy(() => import("./MyComponent.js"));

到此這篇關(guān)于React代碼分割的實(shí)現(xiàn)方法介紹的文章就介紹到這了,更多相關(guān)React代碼分割內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • useEffect如何通過(guò)form.getFieldValue(‘xxx‘)監(jiān)聽(tīng)Form表單變化

    useEffect如何通過(guò)form.getFieldValue(‘xxx‘)監(jiān)聽(tīng)Form表單變化

    這篇文章主要介紹了useEffect如何通過(guò)form.getFieldValue(‘xxx‘)監(jiān)聽(tīng)Form表單變化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • React高級(jí)概念之Context用法詳解

    React高級(jí)概念之Context用法詳解

    在React應(yīng)用中,為了讓數(shù)據(jù)在組件間共享,常見(jiàn)的方式是讓它們以props的形式自頂向下傳遞,如果數(shù)據(jù)要在組件樹(shù)不同層級(jí)共享,那么這些數(shù)據(jù)必須逐層傳遞直到目的地,Context如同管道,它將數(shù)據(jù)從入口直接傳遞到出口,使用Context能避免“prop-drilling”
    2023-06-06
  • React根據(jù)配置生成路由的示例代碼

    React根據(jù)配置生成路由的示例代碼

    React路由看似只能由Route組件包裹組件的結(jié)構(gòu)來(lái)構(gòu)成,但是其實(shí)也可以通過(guò)編寫(xiě)路由數(shù)組配置然后通過(guò)數(shù)組循環(huán)來(lái)生成Route組件包裹組件的結(jié)構(gòu),所以本文給大家介紹了React根據(jù)配置生成路由的方法,需要的朋友可以參考下
    2024-11-11
  • 采用React編寫(xiě)小程序的Remax框架的編譯流程解析(推薦)

    采用React編寫(xiě)小程序的Remax框架的編譯流程解析(推薦)

    這篇文章主要介紹了采用React編寫(xiě)小程序的Remax框架的編譯流程解析(推薦),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • React項(xiàng)目中不需要jQuery原因分析

    React項(xiàng)目中不需要jQuery原因分析

    在Web開(kāi)發(fā)的早期,jQuery是一個(gè)革命性的庫(kù),它極大地簡(jiǎn)化了DOM操作、事件處理、動(dòng)畫(huà)制作以及Ajax請(qǐng)求等任務(wù),React的出現(xiàn),jQuery在新項(xiàng)目中的必要性開(kāi)始受到質(zhì)疑,本文將探討為什么在React應(yīng)用中不需要jQuery,感興趣的朋友可以參考下
    2024-02-02
  • react實(shí)現(xiàn)移動(dòng)端下拉菜單的示例代碼

    react實(shí)現(xiàn)移動(dòng)端下拉菜單的示例代碼

    這篇文章主要介紹了react實(shí)現(xiàn)移動(dòng)端下拉菜單的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • react 組件表格固定底部的實(shí)現(xiàn)代碼

    react 組件表格固定底部的實(shí)現(xiàn)代碼

    在React中,要實(shí)現(xiàn)一個(gè)組件表格并且固定底部,可以使用CSS的固定定位或絕對(duì)定位來(lái)實(shí)現(xiàn),下面通過(guò)示例代碼給大家分享react 組件表格固定底部的實(shí)現(xiàn)代碼,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • React通過(guò)redux-persist持久化數(shù)據(jù)存儲(chǔ)的方法示例

    React通過(guò)redux-persist持久化數(shù)據(jù)存儲(chǔ)的方法示例

    這篇文章主要介紹了React通過(guò)redux-persist持久化數(shù)據(jù)存儲(chǔ)的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • React?diff算法超詳細(xì)講解

    React?diff算法超詳細(xì)講解

    渲染真實(shí)DOM的開(kāi)銷很大,有時(shí)候我們修改了某個(gè)數(shù)據(jù),直接渲染到真實(shí)dom上會(huì)引起整個(gè)dom樹(shù)的重繪和重排。我們希望只更新我們修改的那一小塊dom,而不是整個(gè)dom,diff算法就幫我們實(shí)現(xiàn)了這點(diǎn)。diff算法的本質(zhì)就是:找出兩個(gè)對(duì)象之間的差異,目的是盡可能做到節(jié)點(diǎn)復(fù)用
    2022-11-11
  • React實(shí)現(xiàn)父組件調(diào)用子組件的兩種寫(xiě)法

    React實(shí)現(xiàn)父組件調(diào)用子組件的兩種寫(xiě)法

    react通信分很多種,比如:父子通信,兄弟通信等等,這里我們就簡(jiǎn)單說(shuō)一下父子通信,父子通信分為:父組件調(diào)用子組件里面的方法;子組件調(diào)用子組件里面的方法,這里我們著重說(shuō)一下父組件調(diào)用子組件,需要的朋友可以參考下
    2024-04-04

最新評(píng)論