精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

【翻譯】基于 Create React App路由4.0的異步組件加載(Code Splitting)

開(kāi)發(fā) 前端
本文章是一個(gè)額外的篇章,它可以在你的React app中,幫助加快初始的加載組件時(shí)間。當(dāng)然這個(gè)操作不是完全必要的,但如果你好奇的話,請(qǐng)隨意跟隨這篇文章一起用Create React App和 react路由4.0的異步加載方式來(lái)幫助react.js構(gòu)建大型應(yīng)用。

基于 Create React App路由4.0的異步組件加載

本文章是一個(gè)額外的篇章,它可以在你的React app中,幫助加快初始的加載組件時(shí)間。當(dāng)然這個(gè)操作不是完全必要的,但如果你好奇的話,請(qǐng)隨意跟隨這篇文章一起用Create React App和 react路由4.0的異步加載方式來(lái)幫助react.js構(gòu)建大型應(yīng)用。

代碼分割(Code Splitting)

當(dāng)我們用react.js寫(xiě)我們的單頁(yè)應(yīng)用程序時(shí)候,這個(gè)應(yīng)用會(huì)變得越來(lái)越大,一個(gè)應(yīng)用(或者路由頁(yè)面)可能會(huì)引入大量的組件,可是有些組件是***次加載的時(shí)候是不必要的,這些不必要的組件會(huì)浪費(fèi)很多的加載時(shí)間。

你可能會(huì)注意到 Create React App 在打包完畢之后會(huì)生成一個(gè)很大的.js文件,這包含了我們應(yīng)用程序需要的所有JavaScript。但是,如果用戶只是加載登錄頁(yè)面去登錄網(wǎng)站,我們加載應(yīng)用程序的其余部分是沒(méi)有意義的。在我們的應(yīng)用程序還很小的時(shí)候,這并不是一個(gè)問(wèn)題,但是它卻是我們程序猿優(yōu)化的一個(gè)東西。為了解決這個(gè)問(wèn)題,Create React App有一個(gè)非常簡(jiǎn)單的代碼分割的的方案。

代碼分割和 react-router

在我們 react app 中,常見(jiàn)的路由配置可能是像下面一樣的

  1. /* Import the components */ 
  2. import Home from './containers/Home'
  3. import Posts from './containers/Posts'
  4. import NotFound from './containers/NotFound'
  5.  
  6.  
  7. /* Use components to define routes */ 
  8. export default () => ( 
  9.   <Switch> 
  10.     <Route path="/" exact component={Home} /> 
  11.     <Route path="/posts/:id" exact component={Posts} /> 
  12.     <Route component={NotFound} /> 
  13.   </Switch> 
  14. );  

我們一開(kāi)始引入這些組件,然后定義好的路徑,會(huì)根據(jù)我們的路由去匹配這些組件。

但是,我們靜態(tài)地在頂部導(dǎo)入路由中的所有組件。這意味著,不管哪個(gè)路由匹配,所有這些組件都被加載。我們只想加載對(duì)匹配路由的時(shí)候才加載響應(yīng)的組件。下面我們一步步來(lái)完成這個(gè)使命。

創(chuàng)建一個(gè)異步組件

創(chuàng)建一個(gè)js 文件,如:src/components/AsyncComponent.js,代碼如下

  1. import React, { Component } from 'react'
  2.  
  3. export default function asyncComponent(importComponent) { 
  4.  
  5.   class AsyncComponent extends Component { 
  6.  
  7.     constructor(props) { 
  8.       super(props); 
  9.  
  10.       this.state = { 
  11.         component: null
  12.       }; 
  13.     } 
  14.  
  15.     async componentDidMount() { 
  16.       const { default: component } = await importComponent(); 
  17.  
  18.       this.setState({ 
  19.         component: component 
  20.       }); 
  21.     } 
  22.  
  23.     render() { 
  24.       const C = this.state.component; 
  25.  
  26.       return C 
  27.         ? <C {...this.props} /> 
  28.         : null
  29.     } 
  30.  
  31.   } 
  32.  
  33.   return AsyncComponent; 
  34.  

我們?cè)谶@里做了一些事情:

  1. 這個(gè)asyncComponent 函數(shù)接受一個(gè)importComponent 的參數(shù),importComponent 調(diào)用時(shí)候?qū)?dòng)態(tài)引入給定的組件。
  2. 在componentDidMount 我們只是簡(jiǎn)單地調(diào)用importComponent 函數(shù),并將動(dòng)態(tài)加載的組件保存在狀態(tài)中。
  3. ***,如果完成渲染,我們有條件地提供組件。在這里我們?nèi)绻粚?xiě)null的話,也可提供一個(gè)菊花圖,代表著組件正在渲染。

使用異步組件

現(xiàn)在讓我們使用我們的異步組件,而不是像開(kāi)始的靜態(tài)去引入。

  1. import Home from './containers/Home'

我們要用asyncComponent組件來(lái)動(dòng)態(tài)引入我們需要的組件。

tip: 別忘記 先 import asyncComponent from './AsyncComponent

  1. const AsyncHome = asyncComponent(() => import('./containers/Home')); 

我們將要使用 AsyncHome 這個(gè)組件在我們的路由里面

  1. <Route path="/" exact component={AsyncHome} /> 

現(xiàn)在讓我們回到Notes項(xiàng)目并應(yīng)用這些更改。

src/Routes.js

  1. import React from 'react'
  2. import { Route, Switch } from 'react-router-dom'
  3. import asyncComponent from './components/AsyncComponent'
  4. import AppliedRoute from './components/AppliedRoute'
  5. import AuthenticatedRoute from './components/AuthenticatedRoute'
  6. import UnauthenticatedRoute from './components/UnauthenticatedRoute'
  7.  
  8. const AsyncHome     = asyncComponent(() => import('./containers/Home')); 
  9. const AsyncLogin    = asyncComponent(() => import('./containers/Login')); 
  10. const AsyncNotes    = asyncComponent(() => import('./containers/Notes')); 
  11. const AsyncSignup   = asyncComponent(() => import('./containers/Signup')); 
  12. const AsyncNewNote  = asyncComponent(() => import('./containers/NewNote')); 
  13. const AsyncNotFound = asyncComponent(() => import('./containers/NotFound')); 
  14.  
  15. export default ({ childProps }) => ( 
  16.   <Switch> 
  17.     <AppliedRoute path="/" exact component={AsyncHome} props={childProps} /> 
  18.     <UnauthenticatedRoute path="/login" exact component={AsyncLogin} props={childProps} /> 
  19.     <UnauthenticatedRoute path="/signup" exact component={AsyncSignup} props={childProps} /> 
  20.     <AuthenticatedRoute path="/notes/new" exact component={AsyncNewNote} props={childProps} /> 
  21.     <AuthenticatedRoute path="/notes/:id" exact component={AsyncNotes} props={childProps} /> 
  22.     { /* Finally, catch all unmatched routes */ } 
  23.     <Route component={AsyncNotFound} /> 
  24.   </Switch> 
  25. );  

只需幾次更改就相當(dāng)酷了。我們的app都是設(shè)置了代碼分割而的。也沒(méi)有增加太多的復(fù)雜性。

這里我們看看之前的這個(gè)src/Routes.js路由文件

  1. import React from 'react'
  2. import { Route, Switch } from 'react-router-dom'
  3. import AppliedRoute from './components/AppliedRoute'
  4. import AuthenticatedRoute from './components/AuthenticatedRoute'
  5. import UnauthenticatedRoute from './components/UnauthenticatedRoute'
  6.  
  7. import Home from './containers/Home'
  8. import Login from './containers/Login'
  9. import Notes from './containers/Notes'
  10. import Signup from './containers/Signup'
  11. import NewNote from './containers/NewNote'
  12. import NotFound from './containers/NotFound'
  13.  
  14. export default ({ childProps }) => ( 
  15.   <Switch> 
  16.     <AppliedRoute path="/" exact component={Home} props={childProps} /> 
  17.     <UnauthenticatedRoute path="/login" exact component={Login} props={childProps} /> 
  18.     <UnauthenticatedRoute path="/signup" exact component={Signup} props={childProps} /> 
  19.     <AuthenticatedRoute path="/notes/new" exact component={NewNote} props={childProps} /> 
  20.     <AuthenticatedRoute path="/notes/:id" exact component={Notes} props={childProps} /> 
  21.     { /* Finally, catch all unmatched routes */ } 
  22.     <Route component={NotFound} /> 
  23.   </Switch> 
  24. );  

注意,不要在頂部的引入所有的組件。我們正在創(chuàng)建這些代碼分割的功能,以便在必要時(shí)為我們進(jìn)行動(dòng)態(tài)導(dǎo)入。

現(xiàn)在你運(yùn)行npm run build 您將看到代碼已經(jīng)被分割成一個(gè)個(gè)小文件。

 

下面是部署好的在網(wǎng)站的真實(shí)截圖 

 

每個(gè).chunk.js都是需要的時(shí)候才加載的。當(dāng)然我們的程序是相當(dāng)小的,并且分離在各個(gè)部分的小組件,是不需要這樣子按需加載的。還是看你項(xiàng)目的需求。 

責(zé)任編輯:龐桂玉 來(lái)源: segmentfault
相關(guān)推薦

2017-03-28 10:11:12

Webpack 2React加載

2023-02-02 08:41:14

React團(tuán)隊(duì)Vite

2025-02-17 05:00:00

工具項(xiàng)目Cursor

2021-06-07 08:41:59

React異步組件

2021-07-01 07:03:32

開(kāi)發(fā)Webpack代碼

2025-02-17 12:24:06

2024-01-30 08:30:41

TypeScript編譯器類(lèi)型

2021-10-13 14:01:00

函數(shù)React進(jìn)階

2021-11-07 20:43:14

React

2024-03-13 08:37:18

Vue3Suspense異步組件

2022-06-13 06:20:42

setStatereact18

2017-02-28 21:57:05

React組件

2022-07-10 20:45:47

React加載動(dòng)畫(huà)庫(kù)

2023-03-22 23:23:25

React加載動(dòng)畫(huà)庫(kù)

2019-07-20 23:30:48

開(kāi)發(fā)技能代碼

2019-07-22 10:42:11

React組件前端

2024-03-20 09:31:00

圖片懶加載性能優(yōu)化React

2022-02-04 22:18:28

React路由應(yīng)用

2021-09-01 19:33:41

Source SentryDocker

2013-04-01 15:25:41

異步編程異步EMP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

中文字幕美女视频| 99草草国产熟女视频在线| 国产视频在线观看免费| 在线看片欧美| 国产一区二区三区在线观看网站| 激情五月婷婷久久| av免费在线观| 99精品一区二区三区| 日韩美女视频中文字幕| 四虎884aa成人精品| 国产精品玖玖玖在线资源| 色婷婷综合久久久中文字幕| 视频一区二区视频| 五十路在线观看| 九一九一国产精品| 91精品国产91久久久久久久久| 亚洲黄色网址大全| 欧美美女黄色| 91精品国产福利| 国产日韩成人内射视频| 污视频在线看网站| 国产精品视频你懂的| 国产一区喷水| 国产欧美久久久精品免费| 美女尤物久久精品| 欧美第一黄网免费网站| 最新日韩免费视频| 台湾色综合娱乐中文网| 日韩精品一区二区三区四区视频 | 亚洲视频在线免费| 亚洲欧美激情四射在线日| 男人添女人荫蒂国产| 亚洲欧洲日韩精品在线| 欧美日韩激情视频8区| 特级西西444| 巨大荫蒂视频欧美大片| 国产欧美日韩在线观看| 美媛馆国产精品一区二区| 性欧美18一19性猛交| 激情丁香综合五月| 成人黄色大片在线免费观看| 色屁屁影院www国产高清麻豆| 亚洲国产高清视频| 欧美精品亚州精品| 国产午夜精品理论片| 欧美一级淫片| 国产一区二区三区欧美| 老鸭窝一区二区| 欧美日韩导航| 国产视频精品久久久| 日本五十肥熟交尾| 欧美人成在线观看ccc36| 亚洲成人av片在线观看| 成人区人妻精品一区二| 99re热精品视频| 精品福利在线导航| 亚洲精品久久一区二区三区777 | 欧美xxxx老人做受| 亚洲女人在线观看| 51vv免费精品视频一区二区| 日韩欧美色综合| 日本少妇激三级做爰在线| 99tv成人影院| 欧美一区二区精美| 久久久久无码国产精品一区李宗瑞 | 视频区 图片区 小说区| 精品国产一区二区三区性色av| 91麻豆精品国产91久久久使用方法 | 懂色av一区二区三区免费观看| 99久久精品久久久久久ai换脸| 国产黄色一级大片| jiyouzz国产精品久久| 久久99精品久久久久久久久久| 日韩一卡二卡在线| 26uuu久久综合| 亚洲高清精品中出| 黄色免费在线网站| 亚洲国产精品一区二区www | 黑人巨大精品欧美一区二区桃花岛| 欧美日韩国产在线看| 91蝌蚪视频在线观看| 亚洲ww精品| 精品国产精品一区二区夜夜嗨| 插我舔内射18免费视频| 美女网站一区| 久久视频在线视频| 久久高清免费视频| 日韩高清国产一区在线| 91免费在线视频| 婷婷在线观看视频| 国产精品久久久久久福利一牛影视| 欧美少妇一级片| 高潮在线视频| 欧美日韩极品在线观看一区| 农村末发育av片一区二区| 网红女主播少妇精品视频| 宅男66日本亚洲欧美视频| 69xx绿帽三人行| 久久亚洲电影| 91精品免费| 国产黄色免费在线观看| 亚洲激情六月丁香| 婷婷六月天在线| 国产欧美三级电影| 久久精品国产久精国产一老狼| 国产无套在线观看| 老司机免费视频一区二区三区| 国产精品国产精品国产专区不卡| 春暖花开成人亚洲区| 亚洲自拍偷拍九九九| 国产一二三区av| 欧美专区一区| 亚洲天堂开心观看| 久久精品国产亚洲av香蕉 | 国产又黄又嫩又滑又白| 国产成人一区| 久久久亚洲国产| 97在线视频人妻无码| 久久综合九色综合久久久精品综合| 玖玖精品在线视频| 超薄肉色丝袜脚交一区二区| 亚洲国产99精品国自产| 成人免费视频网站入口::| 水野朝阳av一区二区三区| 国产麻豆日韩| 成人福利网站| 欧美日韩国产系列| 天天躁日日躁aaaa视频| 99亚洲精品| 国产精华一区二区三区| 91香蕉在线观看| 91 com成人网| 成人一级黄色大片| 免费观看成人鲁鲁鲁鲁鲁视频| 精品久久久久久乱码天堂| 少妇视频在线| 欧美一区二区精品在线| 91高清免费看| 久久精品72免费观看| 欧美日本国产精品| 在线视频超级| 亚洲欧美精品中文字幕在线| 草久视频在线观看| 99国产精品一区| 国产原创中文在线观看| 豆花视频一区二区| 久久久午夜视频| 欧美一区二区三区黄片| 亚洲国产色一区| 大桥未久恸哭の女教师| 欧美在线黄色| 99精彩视频在线观看免费| 国产在线二区| 欧美成人免费网站| 69精品久久久| 91香蕉视频mp4| 免费观看日韩毛片| 精品一区三区| 国产精品黄色影片导航在线观看| 欧美一区二区少妇| 欧美在线观看视频在线| 91成人精品一区二区| 美美哒免费高清在线观看视频一区二区| 亚洲国产精品久久久久婷婷老年 | 国产精品我不卡| av伦理在线| 日韩国产在线播放| 亚洲婷婷综合网| 中文字幕国产一区| 亚洲激情在线看| 欧美精品黄色| 国产尤物91| av在线日韩| www.日韩av.com| 国产99对白在线播放| 亚洲va中文字幕| 中文字幕丰满乱子伦无码专区| 爽爽淫人综合网网站| 午夜精品亚洲一区二区三区嫩草| 麻豆久久久久| 欧美精品久久久久| 黄色av免费在线看| 欧美精品久久99久久在免费线| 欧美日韩三级在线观看| 26uuu国产电影一区二区| 九热视频在线观看| 欧美日韩p片| 欧美在线播放一区| 国产美女视频一区二区| 97在线免费观看| av片在线免费观看| 日韩精品一区二区在线观看| 秋霞av一区二区三区| 综合久久久久久| 亚洲色图14p| 久久国产精品色| 国产一二三在线视频| av资源久久| 国产高清自拍99| 国产精品久久乐| 97在线精品国自产拍中文| av在线电影观看| 欧美精品一区二区在线观看| 九九热最新视频| 亚洲va天堂va国产va久| 国产又粗又猛又爽又黄的视频小说| 成人av网在线| 污污的视频免费观看| 亚洲在线一区| 精品国产三级a∨在线| 亚洲精品动态| 国产二区不卡| 国产精品xnxxcom| 日本精品视频在线观看| 日韩电影免费观看| 色妞色视频一区二区三区四区| 欧美一区二区三区黄片| 欧美一区二区视频观看视频| 国产99久久久久久免费看| 香蕉乱码成人久久天堂爱免费| 成人信息集中地| 国产亚洲欧美日韩在线一区| 亚洲少妇中文字幕| 国产精品一区二区91| mm131亚洲精品| 久久狠狠婷婷| 2018日日夜夜| 国内成人在线| 日韩专区第三页| 亚洲精品a级片| 亚洲福利av| 日本一区二区高清不卡| 欧美精品v日韩精品v国产精品| 伊人久久亚洲| 91九色蝌蚪成人| va天堂va亚洲va影视| 成人av.网址在线网站| 精品123区| 国产97在线亚洲| 欧美一级大黄| 日韩免费av一区二区| 大胆人体一区二区| 欧美亚洲另类激情另类| www成人免费观看| 欧美极品美女电影一区| 欧美videosex性欧美黑吊| 久久综合久久美利坚合众国| 老司机在线永久免费观看| 最新国产精品拍自在线播放| 国产在线视频资源| 亚洲欧洲中文天堂| 国产在线观看网站| 国产亚洲欧洲高清| 1区2区3区在线观看| 日韩在线观看免费av| 137大胆人体在线观看| 日韩网站免费观看高清| 在线观看的av| 超碰精品一区二区三区乱码| a级片国产精品自在拍在线播放| 久久中文字幕国产| 日韩影视在线| 91tv亚洲精品香蕉国产一区7ujn| 欧美一级大片| 国产日韩欧美在线播放| 国产精品一区二区精品视频观看| 亚洲一区二区三区久久| 亚洲综合网站| 美日韩精品免费| 色偷偷综合网| 国产免费内射又粗又爽密桃视频 | 凹凸国产熟女精品视频| 久久久夜精品| 一二三级黄色片| 国产91丝袜在线播放| 屁屁影院国产第一页| 久久久国产一区二区三区四区小说 | 亚洲永久精品大片| 日本五十路女优| 欧美性受xxxx黑人xyx性爽| 国产一区二区在线视频观看| 欧美成人猛片aaaaaaa| 日韩大胆人体| 日韩中文在线不卡| av在线不卡免费| 国产精品激情av电影在线观看 | 91精品国产综合久久精品| www.国产黄色| 亚洲日韩中文字幕| а天堂中文在线官网| 91av在线播放| 9999精品| 欧美系列一区| 中文字幕一区二区三三| 九色在线视频观看| 久久成人久久爱| 国产制服丝袜在线| 最新热久久免费视频| 日本在线视频免费| 欧美日韩成人高清| 午夜视频福利在线| 久久这里只有精品视频首页| 人狥杂交一区欧美二区| 成人免费视频网址| 亚洲欧美tv| 野外做受又硬又粗又大视频√| 日本aⅴ免费视频一区二区三区| 国产大学生av| 国产精品乱码妇女bbbb| 三级黄色在线视频| 日韩一区二区三区电影| 裸体xxxx视频在线| 国模吧一区二区三区| 亚洲精品aa| 欧美精品一区在线发布| 狠狠噜噜久久| 在线视频观看一区二区| 久久亚洲一级片| 国语对白一区二区| 91精品国产一区二区三区蜜臀 | 91禁国产网站| 亚洲天堂中文字幕在线观看| 亚洲欧洲精品在线观看| 久久精品亚洲一区二区| 日本一区二区在线观看视频| 综合中文字幕亚洲| 做爰视频毛片视频| 亚洲欧美国产另类| 蜜臀久久精品| 国产视频在线观看一区| 欧美亚韩一区| 日韩欧美色视频| 亚洲精选在线视频| 97免费观看视频| 色哟哟亚洲精品一区二区| 美脚恋feet久草欧美| 久久综合婷婷综合| 亚洲综合另类| 特大黑人巨人吊xxxx| 无码av免费一区二区三区试看 | 国产亚洲精品美女| 亚洲欧美小说色综合小说一区| 国产欧美日韩亚洲| 伊人久久综合| 久久久久亚洲AV成人无码国产| 亚瑟在线精品视频| 秋霞av鲁丝片一区二区| 国内精品伊人久久| 牛牛视频精品一区二区不卡| 免费无码毛片一区二三区| 床上的激情91.| 中文字幕一区二区三区精品| 精品毛片乱码1区2区3区| 欧美韩日亚洲| 韩国一区二区三区美女美女秀 | 手机看片国产精品| 亚洲制服丝袜av| 手机看片国产1024| 欧美一区二区三区免费视| 亚洲精品无吗| 能在线观看的av网站| 美女又爽又黄免费| 色综合天天综合狠狠| 九九九伊在人线综合| 国产精品黄页免费高清在线观看| 99久久99热这里只有精品| 欧美又黄又嫩大片a级| 亚洲综合自拍偷拍| 五月婷中文字幕| 国产精品黄视频| 欧美精品麻豆| 香蕉视频黄色在线观看| 色噜噜夜夜夜综合网| 欧美成人精品一区二区男人看| 亚洲精品欧美日韩专区| 伊人久久亚洲美女图片| 蜜桃无码一区二区三区| 欧美日韩国产综合一区二区三区| 在线观看男女av免费网址| 国产综合色一区二区三区| 日韩高清欧美激情| 欧美黑人猛猛猛| 亚洲美女性生活视频| 亚洲伊人精品酒店| 亚洲精品无码国产| 欧美国产丝袜视频| 性中国xxx极品hd| 清纯唯美亚洲激情| 中国成人一区| 9.1成人看片免费版| 欧美一区二区三区免费观看视频| 99thz桃花论族在线播放| 亚洲国产精品毛片| 成人综合婷婷国产精品久久蜜臀 | 日本老熟俱乐部h0930| 日韩av网站导航| 在线观看欧美| 99久久久无码国产精品6| 亚洲免费看黄网站| 精品视频二区|