最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React利用lazy+Suspense實(shí)現(xiàn)路由懶加載

 更新時(shí)間:2023年06月30日 11:08:28   作者:*且聽風(fēng)吟  
這篇文章主要為大家詳細(xì)介紹了React如何利用lazy+Suspense實(shí)現(xiàn)路由懶加載,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起了解一下

文檔

React lazy、Suspense 官方文檔

進(jìn)入頁(yè)面后,組件的內(nèi)容會(huì)通過 http 請(qǐng)求到對(duì)應(yīng)的組件文件,當(dāng)路由中有較多的頁(yè)面時(shí),會(huì)出現(xiàn)一個(gè)問題,那就是一次性將所有的組件都加載了,浪費(fèi)性能,所以可以通過懶加載的形式來處理。

src/router/routes.ts,使用 react 的 lazy 進(jìn)行按需引入:

import { lazy, LazyExoticComponent } from 'react'
export interface RouteType {
  path: string
  component: LazyExoticComponent<any>
  title?: string
  exact?: boolean
}
const routes: RouteType[] = [
  {
    path: '/',
    component: lazy(() => import('@/views/home/HomePage'))
  },
  {
    path: '/demo/index',
    component: lazy(() => import('@/views/demo/DemoIndex'))
  },
  {
    path: '/demo/popup',
    component: lazy(() => import('@/views/demo/DemoPopup'))
  }
]
export default routes

react 的 lazy 按需引入必須搭配 Suspense 才能實(shí)現(xiàn)懶加載過程,在 src/router/components/AppRouter.tsx 中引入創(chuàng)建的路由表:

import React, { Suspense } from 'react'
import { Router, Route, Switch } from 'react-router-dom'
import { createBrowserHistory, History } from 'history'
import RouteLoading from './RouteLoading'
import routes, { RouteType } from '../routes'
import { BASE_PATH } from '@/globalConstants'
const history: History = createBrowserHistory()
const AppRouter = () => { 
  const AppRoutes = routes.map((route: RouteType) => 
    <Route exact={route.exact === false ? false : true} path={`${BASE_PATH}${route.path}`} render={(props: any) => <route.component {...props} />} key={route.path} />
  )
  return (
    <Router history={history}>
      <Suspense fallback={<RouteLoading />}>
        <Switch>{AppRoutes}</Switch>
      </Suspense>
    </Router>
  )
}
export default AppRouter

src/router/components/RouteLoading.js :

import React from 'react'
import { UuiLoading } from 'uui-web-react'
export default function() {
  return <UuiLoading />
}

Suspense 的 fallback 屬性可以是一個(gè)組件,該組件的引入不需要使用 lazy(),直接引入即可。

src/router/index.tsx :

export { default as AppRouter } from './components/AppRouter'
export { default as routes } from './routes'

其中,引用到了 globalConstants.ts 中定義的路由常量 BASE_PATH ,src/globalConstants.ts:

// 獨(dú)立運(yùn)行的路由要與配置文件保持一致
export const PUBLIC_PATH = '/uui-utils'
export const BASE_PATH = PUBLIC_PATH

App.tsx :

import React from 'react'
import { AppRouter } from './router'
const App = () => {
  return <AppRouter />
}
export default App

總結(jié):

Lazy 和 Suspense 都是 react 暴露的 api,在使用時(shí)需要注意:

Lazy 是個(gè)高階函數(shù),接收一個(gè)函數(shù)形參,最終返回一個(gè)組件, 形參中函數(shù)固定格式:

() => { return import('../../pages/Home/index')};

可以簡(jiǎn)寫為:

const Home = lazy(() => import('../../pages/Home/index'))  

使用 lazy 進(jìn)行路由懶加載后,每次點(diǎn)擊 Link 后,再去請(qǐng)求相關(guān)的組件,那這個(gè)請(qǐng)求是會(huì)耗時(shí)間的。在網(wǎng)速比較慢的情況下,會(huì)出現(xiàn)路由視圖白屏的情況,所以使用 Suspense 標(biāo)簽包裹注冊(cè)的路由來進(jìn)行白屏?xí)r的頁(yè)面展示。

Suspense 標(biāo)簽接收一個(gè)屬性 fallback,fallback 指定一個(gè)組件或者 jsx 代碼塊,來展示當(dāng)請(qǐng)求對(duì)應(yīng)組件,界面白屏?xí)r所展示的內(nèi)容。

到此這篇關(guān)于React利用lazy+Suspense實(shí)現(xiàn)路由懶加載的文章就介紹到這了,更多相關(guān)React路由懶加載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React 組件中實(shí)現(xiàn)事件代理

    React 組件中實(shí)現(xiàn)事件代理

    React的事件系統(tǒng)和瀏覽器事件系統(tǒng)相比,主要增加了兩個(gè)特性:事件代理、和事件自動(dòng)綁定,本文主要介紹了React 組件中實(shí)現(xiàn)事件代理,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • react+ts實(shí)現(xiàn)簡(jiǎn)單jira項(xiàng)目的最佳實(shí)踐記錄

    react+ts實(shí)現(xiàn)簡(jiǎn)單jira項(xiàng)目的最佳實(shí)踐記錄

    這篇文章主要介紹了react+ts實(shí)現(xiàn)簡(jiǎn)單jira項(xiàng)目,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • React首頁(yè)加載速度優(yōu)化小結(jié)

    React首頁(yè)加載速度優(yōu)化小結(jié)

    本文詳細(xì)介紹了如何優(yōu)化一個(gè)加載緩慢的React項(xiàng)目,從刪除未使用的導(dǎo)入、刪除不必要的依賴項(xiàng)、刪除sourceMap、使用Terser壓縮以及使用SplitChunksPlugin分包,再到React的懶加載優(yōu)化,感興趣的可以了解一下
    2026-01-01
  • React中redux的使用詳解

    React中redux的使用詳解

    Redux 是一個(gè)狀態(tài)管理庫(kù),它可以幫助你管理應(yīng)用程序中的所有狀態(tài),Redux的核心概念之一是Store,它表示整個(gè)應(yīng)用程序的狀態(tài),這篇文章給大家介紹React中redux的使用,感興趣的朋友一起看看吧
    2023-12-12
  • React中控制子組件顯示隱藏的兩種方式及對(duì)比詳解

    React中控制子組件顯示隱藏的兩種方式及對(duì)比詳解

    在 react 中,如果我們想控制子組件的顯示和隱藏一般有兩種方式,一種是父組件維護(hù)子組件顯示隱藏狀態(tài),另一種則是通過 forwardRef 直接設(shè)置子組件的狀態(tài)進(jìn)行維護(hù),這兩種方式各有優(yōu)缺點(diǎn),以及對(duì)于不同的使用場(chǎng)景不同,今天我們就來簡(jiǎn)單討論下,需要的朋友可以參考下
    2025-04-04
  • react如何將字符串轉(zhuǎn)義成html語(yǔ)句

    react如何將字符串轉(zhuǎn)義成html語(yǔ)句

    這篇文章主要介紹了react如何將字符串轉(zhuǎn)義成html語(yǔ)句問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • React冒泡和阻止冒泡的應(yīng)用詳解

    React冒泡和阻止冒泡的應(yīng)用詳解

    這篇文章主要介紹了React冒泡和阻止冒泡的應(yīng)用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • VSCode搭建React Native環(huán)境

    VSCode搭建React Native環(huán)境

    這篇文章主要介紹了VSCode搭建React Native環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • React使用context進(jìn)行跨級(jí)組件數(shù)據(jù)傳遞

    React使用context進(jìn)行跨級(jí)組件數(shù)據(jù)傳遞

    這篇文章給大家介紹了React使用context進(jìn)行跨級(jí)組件數(shù)據(jù)傳遞的方法步驟,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)React context組件數(shù)據(jù)傳遞有一定的幫助,感興趣的小伙伴跟著小編一起來學(xué)習(xí)吧
    2024-01-01
  • 詳解開發(fā)react應(yīng)用最好用的腳手架 create-react-app

    詳解開發(fā)react應(yīng)用最好用的腳手架 create-react-app

    本篇文章主要介紹了詳解開發(fā)react應(yīng)用最好用的腳手架 create-react-app,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04

最新評(píng)論

宿松县| 连平县| 天门市| 定日县| 克什克腾旗| 内黄县| 新田县| 威海市| 巩留县| 桂平市| 汝南县| 泸水县| 遵化市| 南安市| 招远市| 尉犁县| 青海省| 蛟河市| 延津县| 保山市| 方山县| 盐城市| 高邮市| 庆城县| 鄂温| 通州区| 搜索| 彩票| 宣汉县| 日喀则市| 丹棱县| 铅山县| 沧州市| 三都| 驻马店市| 于都县| 城步| 会昌县| 罗田县| 彰武县| 修文县|