博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React中的代码分割
阅读量:5828 次
发布时间:2019-06-18

本文共 1580 字,大约阅读时间需要 5 分钟。

代码分割想要解决的问题是:经打包工具?生成的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.lazy2 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     
7
Loading . . .
}> 8
9 10 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   
9
Loading . . . }>10
11
12
13
14
15
16 )

 

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

转载于:https://www.cnblogs.com/fanqshun/p/fanshun.html

你可能感兴趣的文章
maven+SpringMVC搭建RESTful后端服务框架
查看>>
一本书的摘录
查看>>
重排序(转载)
查看>>
python+selenium之字符串切割操作
查看>>
串结构练习——字符串匹配
查看>>
linux下输入密码不回显
查看>>
《构建之法》读书笔记
查看>>
拿下阿里、头条、滴滴的offer后谈谈面试经验---动身前看一看
查看>>
android开发(49) android 使用 CollapsingToolbarLayout ,可折叠的顶部导航栏
查看>>
【ERP】如何在多行数据块中实现仅能勾选唯一的主联系人
查看>>
Oracle 数据库优化的R方法(Method R)
查看>>
CentOS最小化安装系统开启网卡
查看>>
互联网+升级到智能+ 开启万物智联新时代
查看>>
Linux文本编辑器之Nano
查看>>
【原】IOS中KVO模式的解析与应用
查看>>
理解 QEMU/KVM 和 Ceph(3):存储卷挂接和设备名称
查看>>
[MFC] CList
查看>>
[Android Pro] 完美Android Cursor使用例子(Android数据库操作)
查看>>
c++中sizeof的分析
查看>>
线程间操作无效: 从不是创建控件的线程访问它的解决方法
查看>>