react-router、loadable-components 懶加載集成思路

react 項目準(zhǔn)備的時候路由的集成思路,發(fā)出來,希望可以一起交流。

由于我用的最新版本 react ,所以懶加載用 loadable-components 代替 react-loadable。

router.js

/**
 * 思路是通過此文件集中反映路由
 * 所有頁面中的路由都從此文件定義
 * 不同組件會有不同的路由(如appRoutes,就是 App.js 文件里的路由)
 * 注意返回的是一段 JSX,使用時 {nameRoutes} 即可
 */
import React from 'react'
import styled from 'styled-components'
import {Route} from 'react-router-dom'
import loadable from '@loadable/component'

import home from '@/pages/home'

const MyRoute = styled(Route).attrs(props=>({
  exact:props.exact?props.exact:true,
}))``

const getRoutes = routesArray => routesArray.map(obj => <MyRoute key={obj.path} {...obj}/>)

/**
 * ** lazy 生成懶加載組件的函數(shù) **
 * 
 * !注意
 * 經(jīng)測如果函數(shù) lazy 傳入的 path 參數(shù)與 import(`${props.path}`) 對應(yīng)的參數(shù)直接為路徑時,不能用 webpack 自定的路徑,如 @ 指定路徑,即如下組合會報錯
 *   component:lazy("@/pages/detail")
 *   import(`${props.path}`)
 *      報錯:Error: Cannot find module './pages/detail'
 * 
 * 如果路徑改為相對路徑則沒有了此問題:
 *   component:lazy("./pages/detail")
 *   import(`${props.path}`)
 *      成功
 * 
 * 或者不用參數(shù)傳入?yún)s沒有這樣的限制
 *   component:loadable(() => import('@/pages/detail'))
 * 
 * 如果還是想用 webpack 自定義的路徑,則可這樣用:
 *   import(`@/${props.path}`)
 *   component:lazy("pages/detail")
 *      成功
 */

const lazy = path => {
  const AsyncPage = loadable(props => import(`@/${props.path}`))

  return () => <AsyncPage path={path} />
}

// App.js 頁面路由組
export const appRoutes = getRoutes([
  {
    path:'/',
    component:home
  },{
    path:'/detail/:id',
    component:lazy("pages/detail")
  }
])
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 持續(xù)更新中...... 一套企業(yè)級的 UI 設(shè)計語言和 React 實現(xiàn)。 https://mobile.ant....
    日不落000閱讀 6,078評論 0 35
  • 歡迎訪問我的最佳實踐網(wǎng)站 一個動態(tài)導(dǎo)入加載組件的高階組件. 示例 用戶反饋: "我現(xiàn)在非常癡迷于: create-...
    lxg1986閱讀 26,697評論 0 24
  • ? 本文所用項目 GitHub 地址:https://github.com/trp1119/vue-r...
    中國式情調(diào)閱讀 1,488評論 0 5
  • 1. 前言 隨著前端項目的不斷擴(kuò)大,一個原本簡單的網(wǎng)頁應(yīng)用所引用的js文件可能變得越來越龐大。尤其在近期流行的單頁...
    cbw100閱讀 2,256評論 2 8
  • 我們回顧一下所顯示我的評估內(nèi)容。首先,我們的思想和信仰會不可避免地被其他人影響,尤其是在童年。其次,感知和記憶是有...
    柳濤虹閱讀 261評論 0 1

友情鏈接更多精彩內(nèi)容