摘要:使用動態(tài)之前使用動態(tài)后注意,動態(tài)并不是標準的,所以需要配置可以以一個標準組件的方法渲然一個動態(tài)引入的組件。以前的做法使用這樣在組件渲然的時候才加載。
代碼分隔
我們現(xiàn)在大多數(shù)React項目都是以Webpack 或者 Browserify等將一堆的jsx文件組織一起,并且由一個類似index.js的入口文件串聯(lián)起來的單頁面web頁面。
例如:
// math.js export function add(a, b) { return a + b; }
App:
// app.js import { add } from "./math.js"; console.log(add(16, 26)); // 42
打完包后:
function add(a, b) { return a + b; } console.log(add(16, 26)); // 42
從這個例子可以看出,打完包后將所有的js都壓縮到一個文件里了。隨著項目越來越大,打包的文件也會越來越大,如果再引入一些第三方的js庫,那就更龐大了。
接下來介紹一下如何將React代碼分隔。(以下內(nèi)容是16.6.0版本才支持的)
Code Splitting會幫助你的應用實現(xiàn)lazy load.
這么做,即使沒有減少整個項目的代碼量,也會避免在項目初始加載時,加載沒必須的js,從而使用項目性能有所提升。
import()最簡單直接的方式就是引入動態(tài) import 實現(xiàn)代碼分隔。
使用 動態(tài) import 之前:
import { add } from "./math"; console.log(add(16, 26));
使用動態(tài) import 后:
import("./math").then(math => { console.log(math.add(16, 26)); });
注意,動態(tài) import 并不是標準的EcmaScript,所以需要配置 babel-plugin-syntax-dynamic-importReact.lazy
React.lazy 可以以一個React標準組件的方法渲然一個動態(tài)引入的組件。
以前的做法:
import OtherComponent from "./OtherComponent"; function MyComponent() { return (); }
使用 React.lazy :
const OtherComponent = React.lazy(() => import("./OtherComponent")); function MyComponent() { return (); }
這樣在組件MyComponent渲然的時候才加載OtherComponent。
React.lazy 必須使用動態(tài) import() 引入組件,必須返回一個 Promise Component。
React.lazy 目前不支持服務(wù)端渲然Suspense
假如在 React.lazy 時,import 失敗或者異常時,我們需要給于提示,或者一個默認的組件,我們就需要使用 Suspense .
例如:
const OtherComponent = React.lazy(() => import("./OtherComponent")); function MyComponent() { return (}>Loading...
fallback 也是一個組件,但不能通過 動態(tài) import 引入的組件.
Suspense 只能包裹一個單結(jié)點,如果有多個 動態(tài) import 的組件需要放在一個 Suspense 中時,可以使用類似 React.Fragmet 包裹一下,也可以使用其他的 React 組件包裹。例如:
const OtherComponent = React.lazy(() => import("./OtherComponent")); const AnotherComponent = React.lazy(() => import("./AnotherComponent")); function MyComponent() { return (}>Loading...
基于 Router 的代碼分隔,也是我們通常所說的按需加載。是我們推薦的方式。
例如:
import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; import React, { Suspense, lazy } from "react"; const Home = lazy(() => import("./routes/Home")); const About = lazy(() => import("./routes/About")); const App = () => (Loading...
React.lazy 目前只支持 default 導出,不支持命名導出。例如,只支持:
export default () => { return(I am a Lazy component); }
如果要支持命令導出,需要重新再 export ,例如:
// ManyComponents.js export const MyComponent = /* ... */; export const MyUnusedComponent = /* ... */;
// MyComponent.js export { MyComponent as default } from "./ManyComponents.js";
// MyApp.js import React, { lazy } from "react"; const MyComponent = lazy(() => import("./MyComponent.js"));
推薦閱讀 《React 手稿》
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/99906.html
摘要:配置方式找到文件如需添加路由則在里面添加,同時需要后端更改配置除了上面的路徑,其他路徑全部指向單頁應用多路由預渲染指南使用說明源碼為方便快速構(gòu)建項目,本例所有配置的代碼均放在項目中。 寫在前面 每次構(gòu)建react項目的時候都會配置一大堆東西,時間久了就會忘記怎么配置。為了方便自己記憶也為了其他開發(fā)者在構(gòu)建react應用時能夠快速開發(fā),故作此記錄。 本項目基于 create-react-...
摘要:一基礎(chǔ)配置項目安裝安裝并新建文件,并初始化文件入口出口配置插件安裝配置用來解析文件轉(zhuǎn)譯成瀏覽器可以識別的文件。以形式在頁面中插入代碼加載文件是否開啟代碼壓縮。 一.基礎(chǔ)配置 1.init項目 mkdir react-webpack-demo cd react-webpack-demo mkdir src mkdir dist npm init -y 2.安裝webpack 安裝webp...
摘要:或者的,都會對其進行分析。舒適的開發(fā)體驗,有助于提高我們的開發(fā)效率,優(yōu)化開發(fā)體驗也至關(guān)重要組件熱刷新熱刷新自從推出熱刷新后,前端開發(fā)者在開環(huán)境下體驗大幅提高。實現(xiàn)熱調(diào)試后,調(diào)試流程大幅縮短,和普通非直出模式調(diào)試體驗保持一致。 showImg(https://segmentfault.com/img/bVbtOR3?w=1177&h=635); webpack,打包所有的資源 不知道不...
摘要:或者的,都會對其進行分析。舒適的開發(fā)體驗,有助于提高我們的開發(fā)效率,優(yōu)化開發(fā)體驗也至關(guān)重要組件熱刷新熱刷新自從推出熱刷新后,前端開發(fā)者在開環(huán)境下體驗大幅提高。實現(xiàn)熱調(diào)試后,調(diào)試流程大幅縮短,和普通非直出模式調(diào)試體驗保持一致。 showImg(https://segmentfault.com/img/bVbtOR3?w=1177&h=635); webpack,打包所有的資源 不知道不...
閱讀 1361·2019-08-30 15:55
閱讀 1652·2019-08-26 10:21
閱讀 3442·2019-08-23 18:28
閱讀 3380·2019-08-23 15:38
閱讀 748·2019-08-23 15:24
閱讀 2142·2019-08-23 13:59
閱讀 780·2019-08-23 11:31
閱讀 2874·2019-08-23 10:53