React中的代码分割

代码分割想要解决的问题是:经打包工具??生成的bundle文件过大,特别是在我们引入第三方库的情况下。

在React中,我们有一下几种解决方案:

1. 动态加载

 1 // math.js
 2 export function add(a, b) {
 3   return a + b
 4 }
 5
 6 // 未使用动态加载
 7 import { add } from ‘./math.js‘
 8 console.log(add(10, 20))
 9
10 // 使用动态加载
11 import("./math").then(math => {
12   console.log(math.add(5, 16))
13 })

注:如果你使用create-react-app构建程序,则可以直接使用这种语法;如果你使用的是Webpack或者其他打包工具,则需要你按照相应参考文档进行相应配置。使用Babel时,需要babel-plugin-syntax-dynamic-import插件的帮助。

2. React.lazy

React.lazy方法可以让我们动态加载组件

1 // 未使用React.lazy
2 import OtherComponent from ‘./OtherComponent‘
3
4 // 使用React.lazy动态引用组件
5 const OtherComponent = React.lazy(() => import(‘./OtherComponent‘))

配合使用Suspense组件(被它包括的组件或元素如果尚未加载,可以先渲染一些加载提示的内容)

 1 const OtherComponent = React.lazy(() => import(‘./OtherComponent))
 2
 3 // 使用Suspense
 4 function MyComponent() {
 5   return (
 6     <div>
 7       <Suspense fallback={<div>Loading . . .</div>}>
 8         <OtherComponent />
 9       </Suspense>
10     </div>
11   )
12 }

注:React.lazy和Suspense在SSR中目前还不支持,如果需要在SSR中使用,则需要React Loadable插件的支持。

在route过程中使用React.lazy

页面切换和加载通常都需要些时间,所以这里适合使用React.lazy和Suspense的。

 1 import React, { Suspense, lazy } from ‘react
 2 import { BrowserRouter as Router, Route, Switch } from ‘react-router-dom‘
 3
 4 const Home = lazy(() => import(‘./routes/Home‘))
 5 const About = lazy(() => import(‘./routes/About‘))
 6
 7 const App = () => (
 8   <Router>
 9     <Suspense fallback={<div>Loading . . . </div>}>
10       <Switch>
11         <Route exact path="/" component={Home} />
12         <Route path="/about" component={About} />
13       </Switch>
14     </Suspense>
15   </Router>
16 )

详细可参考原文地址:https://reactjs.org/docs/code-splitting.html

原文地址:https://www.cnblogs.com/fanqshun/p/fanshun.html

时间: 2024-10-09 19:45:44

React中的代码分割的相关文章

webpack4 系列教程(四): 单页面解决方案--代码分割和懒加载

本节课讲解webpack4打包单页应用过程中的代码分割和代码懒加载.不同于多页面应用的提取公共代码,单页面的代码分割和懒加载不是通过webpack配置来实现的,而是通过webpack的写法和内置函数实现的. 目前webpack针对此项功能提供 2 种函数: import(): 引入并且自动执行相关 js 代码 require.ensure(): 引入但需要手动执行相关 js 代码 本文将会进行逐一讲解. >>> 本节课源码 >>> 所有课程源码 1. 准备工作 此次代码

[译] 如何在React中写出更优秀的代码

目录 我们先来看 Linting 利用组件模块性.复用性和组合性 propTypes 和 defaultProps 知道何时创建新组件 组件 vs 纯组件 vs 无状态函数组件 无状态函数组件 纯组件 使用 React 开发工具 使用内联条件语句 尽可能使用代码片段库 React 本质 - 学习 React 是如何工作的 快速回顾 在React中写出更好代码的9条建议:学习关于 Linting, propTypes, PureComponent 等. Rajat S · 2018 年 4 月 1

webpack 代码分割一点事

webpack 俨然已经成为前端最主流的构建工具,其功能多种多样,我们今天就来分析下关于代码分割这部分的一点事,并在最后讲述如何实现在webpack编译出的代码里手动添加一个异步chunk. 什么是chunkId与moduleId? 每个chunkId对应的是一个js文件,每个moduleId对应的是一个个js文件的内容的模块(一个js文件里面可以require多个资源,每个资源分配一个moduleId),所以它两的关系就是一个chunkId可能由很多个moduleId组成. 在webpack

React中setState同步更新策略

本文和大家分享的主要是React中setState同步更新相关内容,希望对大家学习React有所帮助. 为了提高性能React将setState设置为批次更新,即是异步操作函数,并不能以顺序控制流的方式设置某些事件,我们也不能依赖于 this.state 来计算未来状态.典型的譬如我们希望在从服务端抓取数据并且渲染到界面之后,再隐藏加载进度条或者外部加载提示: componentDidMount() { fetch('https://example.com') .then((res) => re

PHP中PSR-[0-4]代码规范

PHP-FIG 在说啥是PSR-[0-4]规范的之前,我觉得我们有必要说下它的发明者和规范者:PHP-FIG,它的网站是:www.php-fig.org.就是这个联盟组织发明和创造了PSR-[0-4]规范,膜拜吧,屌丝们! FIG 是 Framework Interoperability Group(框架可互用性小组)的缩写,由几位开源框架的开发者成立于 2009 年,从那开始也选取了很多其他成员进来,虽然不是 “官方” 组织,但也代表了社区中不小的一块.组织的目的在于:以最低程度的限制,来统一

webpack练手项目之easySlide(二):代码分割

Hello,大家好. 在上一篇 webpack练手项目之easySlide(一):初探webpack  中我们一起为大家介绍了webpack的基本用法,使用webpack对前端代码进行模块化打包. 但是乍一看webpack只是将所有资源打包到一个JS文件中而已,并没有做到真正的按需加载,这当然不是我们所想要的. 不急,今天的这一章我们就来一起继续探索webpack的另外一个功能:code split. 1.什么是code split  英文不好,暂且将其翻译为代码分割.也就是我们根据实际业务需求

在react中使用intro.js的的一些经验

react逐渐热了起来,但是新的东西毕竟前辈的经验少一些,前段时间自己在react中用到intro.js时,得到的资料甚少,摸索后便将一些心得记录下来了~ 1 intro.js的引入,这一点请看上一篇博文关于如何在react中引入文件 2 在需要的页面引入文件后, 可以给intro.js的出发点绑定函数 showIntrojs(){ introJs().start(); } 这样intro.js就可以在页面发挥作用了~ 3 intro.js只会对整个组件起作用,并且要在组件外面添加一层父元素(d

React中key的作用

对于React中key的作用,官方没有给出详细的解读,只提到在List中需要给key赋值来区分每一条记录,http://blog.csdn.net/code_for_free/article/details/50514259里讲解了key的使用场景, http://taobaofed.org/blog/2016/08/24/react-key/从三方面讲了List组件中key存在的原因和List之外使用key作为trick简化代码逻辑,本文以List中新增元素为例,从List子组件生命周期函数的

Xcode概览:在源码编辑器中编写代码 --【转载】

转自:http://www.cocoachina.com/ios/20141204/10394.html 本章节由CocoaChina翻译组成员星夜暮晨(博客)翻译自Xcode Overview:Write Code in the Source Editor,CocoaChina校对,敬请勘误. 您将大部分开发时间花在了编写.编辑以及调试代码上.Xcode源码编辑器的语法修正.代码补全以及静态代码分析等特性可以帮您快速准确地键入代码.而诸如分拆窗口.快捷键.syntax-aware字体以及文本颜