欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React基于路由的代碼分割技術(shù)詳解

 更新時(shí)間:2022年12月23日 16:49:05   作者:黎燃  
這篇文章主要為大家介紹了React基于路由的代碼分割技術(shù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

代碼分割

// app.js
import { add } from './math.js';
console.log(add(16, 26)); // 42

大多數(shù)React應(yīng)用程序?qū)⑹褂肳ebpack、Rollup或Browserify等構(gòu)建工具來打包文件。打包是將文件引入并合并到單個(gè)文件中,最后形成一個(gè)“包”的過程。然后在頁面上引入捆綁包,整個(gè)應(yīng)用程序可以一次加載

function add(a, b) {
  return a + b;
}
console.log(add(16, 26)); // 42

小心: 最后,包文件將與上面的示例非常不同。 如果使用的是Create React App、Next Js、Gatsby或類似工具,將擁有一個(gè)可直接用于打包的Webpack配置。 如果不使用這些工具,則需要自己配置它們。例如,查看Webpack文檔中的安裝和入門教程。

分割

打包是一項(xiàng)偉大的技術(shù),但隨著應(yīng)用程序的增長,代碼包也會(huì)隨之增長。尤其是在集成大型第三方庫的情況下。需要注意代碼包中包含的代碼,以避免由于容量過大而導(dǎo)致加載時(shí)間過長。 為了避免創(chuàng)建大型代碼包,在早期階段考慮這個(gè)問題并劃分代碼包是一個(gè)不錯(cuò)的選擇。代碼分區(qū)是Webpack、Rollup和Browserify(factor bundle)等打包程序支持的技術(shù),它可以創(chuàng)建多個(gè)包并在運(yùn)行時(shí)動(dòng)態(tài)加載它們。 應(yīng)用程序的代碼分段可以幫助“懶惰地加載”當(dāng)前用戶所需的內(nèi)容,并可以顯著提高應(yīng)用程序的性能。雖然它不會(huì)減少應(yīng)用程序的總代碼量,但可以避免加載用戶永遠(yuǎn)不需要的代碼,并減少在初始加載時(shí)需要加載的代碼量。

import { add } from './math';
console.log(add(16, 26));
import("./math").then(math => {
  console.log(math.add(16, 26));
});

當(dāng)Webpack解析此語法時(shí),它將自動(dòng)拆分代碼。如果使用CreateReact應(yīng)用程序,則該功能已被開箱即用,可以立即使用該功能。下一個(gè)Js在沒有配置的情況下也支持此功能。 如果自己配置Webpack,可能需要閱讀Webpack的代碼拆分指南。的Webpack配置應(yīng)該與此類似。 當(dāng)使用Babel時(shí),應(yīng)該確保Babel能夠解析動(dòng)態(tài)導(dǎo)入語法,而不是轉(zhuǎn)換它。對于這個(gè)需求,需要babel插件語法導(dǎo)入插件。

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

當(dāng)組件首次呈現(xiàn)時(shí),此代碼將自動(dòng)導(dǎo)入包含OtherComponent組件的包。 反應(yīng)Lazy接受需要?jiǎng)討B(tài)調(diào)用import()的函數(shù)。它必須返回一個(gè)promise,這需要解析dealout導(dǎo)出的React組件。 然后,應(yīng)該在Suspense組件中呈現(xiàn)懶惰組件,以便我們可以在等待加載懶惰組件時(shí)使用優(yōu)雅的降級(如加載指示符)。

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

回退屬性接受在加載組件期間要顯示的任何React元素??梢詫uspend組件放置在延遲加載組件上方的任何位置。甚至可以用一個(gè)Suspend組件包裝多個(gè)延遲加載組件。

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>
);

基于路由的代碼分割

決定在哪里引入代碼分段需要一些技巧。需要確保所選位置可以均勻地拆分代碼包,而不會(huì)影響用戶體驗(yàn)。 一個(gè)好的選擇是從路由開始。大多數(shù)web用戶習(xí)慣于在頁面之間進(jìn)行加載和切換過程。還可以選擇重新渲染整個(gè)頁面,這樣用戶在渲染時(shí)就不必與頁面上的其他元素交互。 以下是如何在應(yīng)用程序中使用React的示例。第三方庫(如lazy和React Router)用于配置基于路由的代碼拆分。

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>
);

反應(yīng)Lazy當(dāng)前僅支持默認(rèn)導(dǎo)出。如果要導(dǎo)入的模塊使用命名導(dǎo)出,則可以創(chuàng)建一個(gè)中間模塊作為默認(rèn)模塊重新導(dǎo)出。這確保了樹抖動(dòng)不會(huì)出錯(cuò),并且不會(huì)引入不必要的組件。 反應(yīng)Lazy和Suspend技術(shù)尚不支持服務(wù)器端渲染。如果想在使用服務(wù)器端渲染的應(yīng)用程序中使用它,我們建議使用可加載組件。它有一個(gè)很棒的服務(wù)器端渲染和打包指南。

以上就是React基于路由的代碼分割技術(shù)詳解的詳細(xì)內(nèi)容,更多關(guān)于React基于路由代碼分割的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • React組件之間的通信的實(shí)例代碼

    React組件之間的通信的實(shí)例代碼

    本篇文章主要介紹了React組件間通信的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • 詳解如何用webpack4從零開始構(gòu)建react開發(fā)環(huán)境

    詳解如何用webpack4從零開始構(gòu)建react開發(fā)環(huán)境

    這篇文章主要介紹了詳解如何用webpack4從零開始構(gòu)建react開發(fā)環(huán)境,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • React useImperativeHandle處理組件狀態(tài)和生命周期用法詳解

    React useImperativeHandle處理組件狀態(tài)和生命周期用法詳解

    React Hooks 為我們提供了一種全新的方式來處理組件的狀態(tài)和生命周期,useImperativeHandle是一個(gè)相對較少被提及的Hook,但在某些場景下,它是非常有用的,本文將深討useImperativeHandle的用法,并通過實(shí)例來加深理解
    2023-09-09
  • React hooks異步操作踩坑記錄

    React hooks異步操作踩坑記錄

    這篇文章主要介紹了React hooks異步操作踩坑記錄,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 詳解如何使用React構(gòu)建跑馬燈組件

    詳解如何使用React構(gòu)建跑馬燈組件

    當(dāng)你想到跑馬燈時(shí),往往會(huì)想到游樂園里那些充滿活力的燈光和旋轉(zhuǎn)的顯示,帶回童年的美好回憶,本文將和大家一起探索如何在 React 中構(gòu)建一個(gè)引人入勝的跑馬燈組件,需要的朋友可以參考下
    2024-04-04
  • React useCallback使用教程

    React useCallback使用教程

    useCallback是react中比較重要的一個(gè)hook,useCallback 用來返回一個(gè)函數(shù),在父子組件傳參或者通用函數(shù)封裝中,起到舉足輕重的作用
    2023-01-01
  • 從零搭建Webpack5-react腳手架的實(shí)現(xiàn)步驟(附源碼)

    從零搭建Webpack5-react腳手架的實(shí)現(xiàn)步驟(附源碼)

    本文主要介紹了從零搭建Webpack5-react腳手架的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 如何用webpack4.0擼單頁/多頁腳手架 (jquery, react, vue, typescript)

    如何用webpack4.0擼單頁/多頁腳手架 (jquery, react, vue, typescript)

    這篇文章主要介紹了如何用webpack4.0擼單頁/多頁腳手架 (jquery, react, vue, typescript),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 聊聊React onClick 傳遞參數(shù)的問題

    聊聊React onClick 傳遞參數(shù)的問題

    很多朋友向小編反映一個(gè)問題關(guān)于React onClick 傳遞參數(shù)的問題,當(dāng)點(diǎn)擊刪除按鈕需要執(zhí)行刪除操作,針對這個(gè)問題該如何處理呢?下面小編給大家?guī)砹薘eact onClick 傳遞參數(shù)的問題,感興趣的朋友一起看看吧
    2021-10-10
  • react源碼合成事件深入解析

    react源碼合成事件深入解析

    這篇文章主要為大家介紹了react源碼合成事件深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評論