摘要:使用动态之前使用动态后注意,动态并不是标准的,所以需要配置可以以一个标准组件的方法渲然一个动态引入的组件。以前的做法使用这样在组件渲然的时候才加载。
代码分隔
我们现在大多数React项目都是以Webpack 或者 Browserify等将一堆的jsx文件组织一起,并且由一个类似index.js的入口文件串联起来的单页面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代码分隔。(以下内容是16.6.0版本才支持的)
Code Splitting会帮助你的应用实现lazy load.
这么做,即使没有减少整个项目的代码量,也会避免在项目初始加载时,加载没必须的js,从而使用项目性能有所提升。
import()最简单直接的方式就是引入动态 import 实现代码分隔。
使用 动态 import 之前:
import { add } from "./math"; console.log(add(16, 26));
使用动态 import 后:
import("./math").then(math => { console.log(math.add(16, 26)); });
注意,动态 import 并不是标准的EcmaScript,所以需要配置 babel-plugin-syntax-dynamic-importReact.lazy
React.lazy 可以以一个React标准组件的方法渲然一个动态引入的组件。
以前的做法:
import OtherComponent from "./OtherComponent"; function MyComponent() { return (); }
使用 React.lazy :
const OtherComponent = React.lazy(() => import("./OtherComponent")); function MyComponent() { return (); }
这样在组件MyComponent渲然的时候才加载OtherComponent。
React.lazy 必须使用动态 import() 引入组件,必须返回一个 Promise Component。
React.lazy 目前不支持服务端渲然Suspense
假如在 React.lazy 时,import 失败或者异常时,我们需要给于提示,或者一个默认的组件,我们就需要使用 Suspense .
例如:
const OtherComponent = React.lazy(() => import("./OtherComponent")); function MyComponent() { return (}>Loading...
fallback 也是一个组件,但不能通过 动态 import 引入的组件.
Suspense 只能包裹一个单结点,如果有多个 动态 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 手稿》
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/99906.html
摘要:配置方式找到文件如需添加路由则在里面添加,同时需要后端更改配置除了上面的路径,其他路径全部指向单页应用多路由预渲染指南使用说明源码为方便快速构建项目,本例所有配置的代码均放在项目中。 写在前面 每次构建react项目的时候都会配置一大堆东西,时间久了就会忘记怎么配置。为了方便自己记忆也为了其他开发者在构建react应用时能够快速开发,故作此记录。 本项目基于 create-react-...
摘要:一基础配置项目安装安装并新建文件,并初始化文件入口出口配置插件安装配置用来解析文件转译成浏览器可以识别的文件。以形式在页面中插入代码加载文件是否开启代码压缩。 一.基础配置 1.init项目 mkdir react-webpack-demo cd react-webpack-demo mkdir src mkdir dist npm init -y 2.安装webpack 安装webp...
摘要:或者的,都会对其进行分析。舒适的开发体验,有助于提高我们的开发效率,优化开发体验也至关重要组件热刷新热刷新自从推出热刷新后,前端开发者在开环境下体验大幅提高。实现热调试后,调试流程大幅缩短,和普通非直出模式调试体验保持一致。 showImg(https://segmentfault.com/img/bVbtOR3?w=1177&h=635); webpack,打包所有的资源 不知道不...
摘要:或者的,都会对其进行分析。舒适的开发体验,有助于提高我们的开发效率,优化开发体验也至关重要组件热刷新热刷新自从推出热刷新后,前端开发者在开环境下体验大幅提高。实现热调试后,调试流程大幅缩短,和普通非直出模式调试体验保持一致。 showImg(https://segmentfault.com/img/bVbtOR3?w=1177&h=635); webpack,打包所有的资源 不知道不...
阅读 1285·2019-08-30 15:55
阅读 1625·2019-08-26 10:21
阅读 3415·2019-08-23 18:28
阅读 3352·2019-08-23 15:38
阅读 667·2019-08-23 15:24
阅读 2113·2019-08-23 13:59
阅读 752·2019-08-23 11:31
阅读 2851·2019-08-23 10:53