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

React?Router?v6路由懶加載的2種方式小結(jié)

 更新時(shí)間:2024年04月18日 08:47:13   作者:佟舟  
React?Router?v6?的路由懶加載有2種實(shí)現(xiàn)方式,1是使用react-router自帶的?route.lazy,2是使用React自帶的?React.lazy,下面我們就來(lái)看看它們的具體實(shí)現(xiàn)方法吧

介紹

React Router v6 的路由懶加載有2種實(shí)現(xiàn)方式,1是使用react-router自帶的 route.lazy,2是使用React自帶的 React.lazy

下面介紹這兩種實(shí)現(xiàn)方式

注:本文內(nèi)容針對(duì)配置式路由,非約定式路由

0. 相同代碼的部分

當(dāng)前我的依賴包版本 package.json:

{
  "dependencies": {
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-router-dom": "^6.14.0"
  },
  "devDependencies": {
    "@types/node": "^18.15.11",
    "@types/react": "^18.0.28",
    "@types/react-dom": "^18.0.11",
    "@vitejs/plugin-react": "^3.1.0",
    "typescript": "^4.9.3",
    "vite": "^4.2.0"
  },
}

入口文件 src/App.tsx:

import './App.less'
import React from 'react'
import { RouterProvider } from 'react-router-dom'
import { router } from '@/routes'

function App() {
  return <RouterProvider router={router} />
}

export default App

1. React.lazy

依賴 React.lazy + React.Suspense

src/routes/index.tsx:

import React from 'react'
import { createHashRouter, Navigate, RouteObject } from 'react-router-dom'
import Loading from '@/components/Loading'
import BasicLayout from '@/layouts/BasicLayout'
import Page404 from '@/pages/common/404'
import PageLogin from '@/pages/login'

const Page_goodsMng = React.lazy(() => import('@/pages/goods/goodsMng'))

const route404 = {
  path: '*',
  element: <Page404 />,
}

const routes: RouteObject[] = [
  {
    path: '/login',
    element: <PageLogin />
  },
  {
    element: <BasicLayout />,
    children: [
      //// 懶加載代碼
      // 商品管理
      {
        path: '/web/company/goods/goodsmgr',
        element: (
          <React.Suspense fallback={<Loading />}>
            <Page_goodsMng />
          </React.Suspense>
        ),
      },
      route404,
    ],
  },
  route404,
]

export default routes

export const router = createHashRouter(routes as any)

2. react-router 自帶的 route.lazy

src/routes/index.tsx:

import React from 'react'
import { createHashRouter, Navigate, RouteObject } from 'react-router-dom'
import Loading from '@/components/Loading'
import BasicLayout from '@/layouts/BasicLayout'
import Page404 from '@/pages/common/404'
import PageLogin from '@/pages/login'

const routes: RouteObject[] = [
  {
    path: '/login',
    element: <PageLogin />
  },
  {
    element: <BasicLayout />,
    children: [
      //// 懶加載代碼
      // 商品管理
      {
        path: '/web/company/goods/goodsmgr',
        // use react-router route.lazy
        lazy: async () => ({
          Component: (await import('@/pages/goods/goodsMng')).default,
        }),
      },
      route404,
    ],
  },
  route404,
]

export default routes

export const router = createHashRouter(routes as any)

3. 兩種方式的區(qū)別

React.lazy的方式可以配置加載時(shí)的fallback,route.lazy則不支持,也就是說(shuō)當(dāng)懶加載的路由內(nèi)容很大時(shí),route.lazy的方式很有可能有一段時(shí)間的白屏。

除了fallback,目前我的體驗(yàn)上還沒(méi)發(fā)現(xiàn)其他的區(qū)別,如果還有其他的區(qū)別可以評(píng)論區(qū)討論一下奧

所以對(duì)比來(lái)看的話,route.lazy好像沒(méi)有什么優(yōu)勢(shì)

那么我就有疑問(wèn)了,我覺(jué)得fallback這個(gè)屬于比較基礎(chǔ)的功能,react-router既然加入的route.lazy的用法,為什么不加 fallback 呢

4. React Router 為什么不自帶fallback功能,要怎么處理?

我找到了一個(gè)react-router的issues,問(wèn)了相同的問(wèn)題,react-router的作者之一進(jìn)行了回答,1是印證了react-router確實(shí)沒(méi)有自帶fallback的功能,2是回答了作者是如何考慮,以及如果想增加fallback的效果要怎么處理

issues: github.com/remix-run/react-router/discussions/10540

作者認(rèn)為:

簡(jiǎn)單說(shuō)...這好像就是作者喜好的問(wèn)題?

React Router 官網(wǎng)的效果是,跳轉(zhuǎn)路由過(guò)程中(懶加載過(guò)程),當(dāng)前頁(yè)面淡出、頂部增加進(jìn)度條的方式,而非fallback的loading方式

4.1 useNavigation

如果使用route.lazy的方式,可以使用這個(gè) useNavigation 這個(gè)hooks,來(lái)判斷路由是否是loading的狀態(tài)

經(jīng)過(guò)測(cè)試,頁(yè)面跳轉(zhuǎn)時(shí),navigation為loading

到此這篇關(guān)于React Router v6路由懶加載的2種方式小結(jié)的文章就介紹到這了,更多相關(guān)React路由懶加載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 對(duì)react中間件的理解

    對(duì)react中間件的理解

    這篇文章主要介紹了對(duì)react中間件的理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 淺談React Event實(shí)現(xiàn)原理

    淺談React Event實(shí)現(xiàn)原理

    這篇文章主要介紹了淺談React Event實(shí)現(xiàn)原理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • react render的原理及觸發(fā)時(shí)機(jī)說(shuō)明

    react render的原理及觸發(fā)時(shí)機(jī)說(shuō)明

    這篇文章主要介紹了react render的原理及觸發(fā)時(shí)機(jī)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • React各種狀態(tài)管理器的解讀及使用方法

    React各種狀態(tài)管理器的解讀及使用方法

    這篇文章主要介紹了對(duì)于React各種狀態(tài)管理器的解讀,文中給大家提到了狀態(tài)管理器是如何使用的,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • react 權(quán)限樹(shù)形結(jié)構(gòu)實(shí)現(xiàn)代碼

    react 權(quán)限樹(shù)形結(jié)構(gòu)實(shí)現(xiàn)代碼

    這篇文章主要介紹了react 權(quán)限樹(shù)形結(jié)構(gòu)實(shí)現(xiàn)代碼,項(xiàng)目背景react + ant design,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-05-05
  • 如何深入理解React的ref 屬性

    如何深入理解React的ref 屬性

    關(guān)于 Refs ,React 官網(wǎng)講解的對(duì)于新手來(lái)說(shuō)不太友好,還是自己一字一句解讀后并以代碼驗(yàn)證的方式后真正理解的.
    2021-05-05
  • react實(shí)現(xiàn)自定義拖拽hook

    react實(shí)現(xiàn)自定義拖拽hook

    這篇文章主要為大家詳細(xì)介紹了react實(shí)現(xiàn)自定義拖拽hook,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • react.js 獲取真實(shí)的DOM節(jié)點(diǎn)實(shí)例(必看)

    react.js 獲取真實(shí)的DOM節(jié)點(diǎn)實(shí)例(必看)

    下面小編就為大家?guī)?lái)一篇react.js 獲取真實(shí)的DOM節(jié)點(diǎn)實(shí)例(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Ant Design與Ant Design pro入門(mén)使用教程

    Ant Design與Ant Design pro入門(mén)使用教程

    Ant Design 是一個(gè)服務(wù)于企業(yè)級(jí)產(chǎn)品的設(shè)計(jì)體系,組件庫(kù)是它的 React 實(shí)現(xiàn),antd 被發(fā)布為一個(gè) npm 包方便開(kāi)發(fā)者安裝并使用,這篇文章主要介紹了Ant Design與Ant Design pro入門(mén),需要的朋友可以參考下
    2023-12-12
  • 解決React報(bào)錯(cuò)Parameter 'props' implicitly has an 'any' type

    解決React報(bào)錯(cuò)Parameter 'props' implicitly&nb

    這篇文章主要為大家介紹了React報(bào)錯(cuò)Parameter 'props' implicitly has an 'any' type的解決處理方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論

乐亭县| 共和县| 大宁县| 汾西县| 临夏市| 四会市| 牡丹江市| 金山区| 陇川县| 固原市| 长沙市| 自贡市| 股票| 五河县| 明光市| 如东县| 阳春市| 吉木乃县| 铅山县| 潼关县| 漾濞| 南开区| 广河县| 晋宁县| 孝义市| 荃湾区| 米脂县| 商都县| 吉水县| 阿拉尔市| 同心县| 荣昌县| 罗平县| 江西省| 灌云县| 临沧市| 青神县| 浏阳市| 台南市| 内乡县| 仙居县|