react按需加载
来源:互联网 发布:淘宝客服成功案例分析 编辑:程序博客网 时间:2024/06/05 16:51
原文链接:http://blog.csdn.net/mjzhang1993/article/details/54913942点击打开链接
react-router webpack 按需加载,与路由权限控制
说明
当网站规模越来越大,通过webpack 打包后的 React 项目也会越来越大,这会导致首页渲染时间变长,影响用户体验,webpack 提供了一种按需加载的方式,需要结合 react-router 使用,他会将代码拆分成多个小包,需要哪个部分就加载响应的包。
webpack 配置
首先需要对 config 文件修改一下,如下
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
路由配置页(app/js/routes.js
)
react 按需加载,关键是让路由动态加载组件,react-router 提供了一个属性
getComponent
,它与component
属性一样,但是是异步的,当路由匹配时才会调用这个方法,常用于代码分割;
相关内容查看 API文档webpack 为我们提供了一个按需加载函数
require.ensure(dependencies, callback, chunkName)
,
- dependencies : 依赖的模块数组
- callback : 回调函数,该函数调用时会传入一个 require 参数
- chunkName : 模块名,用于构建时生成文件名
更多了解,查看官方文档
一般写法
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
注意:
cb(null, require('./containers/Login.js').default)
因为我用 es6 的export default
导出的组件,所以 require 之后要加上default
,如果使用module.export
导出组件 则不需要加 default
拆分写法
以上写法在 路由层级或者数量较多的时候会比较臃肿,所以还需要对路由进行拆分
路由拆分,需要对目录结构做一下改变,在js 文件夹下添加 routes 路由配置文件夹
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
routes.js 路由配置的主文件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
js/routes/home.js 路由分支
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
路由权限控制
基本思路 : 每当指定路由要发生改变,就使用一个中间服务,介于上一级路由和将要到达路由之间启动,来判断我们是否有进入这个路由的权限,React 中的
<Route />
提供了一个onEnter
方法,表示正要进入这个路由,在这里判断进入权限,可以修改要进入的页面
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
注:nextState : 表示跳转后的location 信息;replace 用于 更改下一个进入的页面地址,但是不会跳转;next : 用于跳转页面,没有其他操作则显示当前路由对应页面
如果使用路由拆分,如下
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- react按需加载
- react按需加载
- react-router 按需加载
- react webpack 按需加载初试
- react-router4 实现按需加载
- react-router实现按需加载
- Webpack + react-router 按需加载
- webpack+react-router按需加载入门
- react-router v4 按需加载
- React学习笔记_按需加载
- react配置antd的按需加载。
- React router+ webpack实现:按需加载
- React-router中,结合webpack实现按需加载
- create-react-app按需加载以及部署
- react中路由和按需加载问题
- react结合redux和react-router开发大型应用实现按需加载(code splitting)
- react-router4 实现按需加载并利用withRouter传递props
- React开发中使用require.ensure()按需加载ES6组件
- mac中安装、启动ActiveMQ
- ajax实例--移动业务管理系统配置业务费用
- SpringMVC-Mybatis-Memcached整合案例
- JIRA学习
- NetHandler的生命周期
- react按需加载
- 51nod 1011最大公约数GCD【数论】
- Yaml快速入门
- 使用xargs循环查找文件中的字符串并打印出来
- 题目:输入N个整数,找出其中最小的k个整数。例如输入 4,5,1,6,2,7,3,8,输入k=4,则输出最小的四个数是1,2,3,4 算法分析: 算法1.O(n)的算法,修改输入的数组 可以基于get
- 单例饿汉模式中final关键字的作用
- JEasyPoi 2.1.4 (Jeecg订制) 版本发布,Excel 和 Word 简易工具类
- 排序小练习(桶,冒泡,快速)
- MySQL workbench闪退 解决方法