react-router 4.x 路由按需加载
react-router 4 代码分割(按需加载) 官方文档 https://serverless-stack.com/chapters/code-splitting-in-create-react-app.html
1.未采用路由按需加载的代码
import React from 'react';
import ReactDOM from 'react-dom';
import { Route , BrowserRouter, Switch } from 'react-router-dom';
import {Provider} from 'react-redux';
import './config/rem.js';
import registerServiceWorker from './registerServiceWorker';
import Loadable from 'react-loadable';
import {store} from './redux/store/store';
import './style/common.scss';
import Home from './page/home/';
import Welcome from './page/welcome/';
import Login from './page/login/';
import Store from './page/store/';
import User from './page/user/';
import Error from './page/error'; const routes = [
{ path: '/', component: Home, exact: true },
{ path: '/login', component: Login },
{ path: '/welcome', component: Welcome },
{ path: '/store', component: Store },
{ path: '/user', component: User }
] ReactDOM.render(
<Provider store={store}>
<BrowserRouter>
<div className="router-page">
<Switch>
{
routes.map(route => (
<Route key={route.path} path={route.path} component={route.component} exact={route.exact} />
))
}
<Route component={ Error } />
</Switch>
</div>
</BrowserRouter>
</Provider>,
document.getElementById('root')
);
registerServiceWorker();
2.采用 react-loadable 来实现路由按需加载
cnpm install --save react-loadable
import React from 'react';
import ReactDOM from 'react-dom';
import { Route , BrowserRouter, Switch } from 'react-router-dom';
import {Provider} from 'react-redux';
import './config/rem.js';
import registerServiceWorker from './registerServiceWorker';
import Loadable from 'react-loadable';
import {store} from './redux/store/store';
import './style/common.scss'; const MyLoadingComponent = ({ isLoading, error }) => {
if (isLoading) {
return <div>Loading...</div>
}
else if (error) {
return <div>Sorry, there was a problem loading the page.</div>
}
else {
return null;
}
}; const AsyncHome = Loadable({
loader: () => import('./page/home/'),
loading: MyLoadingComponent
});
const AsyncWelcome = Loadable({
loader: () => import('./page/welcome/'),
loading: MyLoadingComponent
});
const AsyncLogin = Loadable({
loader: () => import('./page/login/'),
loading: MyLoadingComponent
});
const AsyncStore = Loadable({
loader: () => import('./page/store/'),
loading: MyLoadingComponent
});
const AsyncUser = Loadable({
loader: () => import('./page/user/'),
loading: MyLoadingComponent
});
const AsyncCheckAuth = Loadable({
loader: () => import('./page/checkAuth/'),
loading: MyLoadingComponent
});
const AsyncError= Loadable({
loader: () => import('./page/error'),
loading: MyLoadingComponent
}); const routes = [
{ path: '/', component: AsyncHome, exact: true },
{ path: '/login', component: AsyncLogin },
{ path: '/welcome', component: AsyncWelcome },
{ path: '/store', component: AsyncStore },
{ path: '/user', component: AsyncUser }
] ReactDOM.render(
<Provider store={store}>
<BrowserRouter>
<div className="router-page"> <Switch>
{
routes.map(route => (
<Route key={route.path} path={route.path} component={route.component} exact={route.exact} />
))
}
<Route component={ Error } />
</Switch>
</div>
</BrowserRouter>
</Provider>,
document.getElementById('root')
);
registerServiceWorker();
ok,以上就能轻松实现路由的按需加载
react-router 4.x 路由按需加载的更多相关文章
- react16 路由按需加载、路由权限配置
1. 路由按需加载: 不做按需加载,代码全部打包在bundle.js 文件里,首屏渲染很慢,项目文件较多,会出现1分钟加载的可能性. import React, { Component } from ...
- react路由按需加载方法
使用router4之后以前的按需加载方法require.ensure 是不好使了. 所以我们改用react-loadable插件做按需加载. 第一步: yarn add react-loadable ...
- react 实现路由按需加载
import() 方法: async.js 文件内容: import React from 'react'; // import "babel-polyfill"; //compo ...
- vue中路由按需加载的几种方式
使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hello' import ...
- vue 动态路由按需加载的三种方式
在Vue项目中,一般使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hell ...
- 【koa2基础框架封装】基于Proxy路由按需加载器和初始加载器
我们在使用koa2做路由拦截后一般都习惯于直接将查找对应处理函数的过程映射到项目的文件夹目录,如: router.get('/test', app.controller.index.test); ap ...
- vue学习指南:第十二篇(详细) - Vue的 路由 第二篇 ( 路由按需加载(懒加载))
各位朋友 因 最近工作繁忙,小编停更了一段时间,快过年了,小编祝愿 大家 事业有成 学业有成 快乐健康 2020开心过好每一天.从今天开始 我会抽时间把 Vue 的知识点补充完整,以及后期会带给大家更 ...
- vue项目实现路由按需加载的3种方式
vue异步组件技术 ==== 异步加载vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 .但是,这种情况下一个组件生成一个js文件 /* vue异步组件技术 */ { ...
- react中create-react-app配置antd按需加载(方法二)
1.yarn add babel-plugin-import 2.在根目录下的package.json下的bable中添加相应代码 "babel": { "presets ...
随机推荐
- libsqlite3.dylib与libsqlite3.0.dylib的差别
在我们加入数据库框架时,在搜索框中输入sqlitekeyword,以下列表区会显示libsqlite3.dylib,libsqlite3.0.dylib. 此时我们选择libsqlite3.0.dyl ...
- SIM卡APDU指令【转】
本文转载自:http://blog.csdn.net/hlx156/article/details/54136756 一个APDU可以是一个命令,也可以是命令的响应. 命令APDU的一般格式: CLA ...
- sublime —— 强大的插件
1. 代码 自动补全与智能提示: All Autocomplete:Sublime Text 默认的 Autocomplete 功能只考虑当前的文件,而 All Autocomplete 插件会搜索所 ...
- zoj 3023 Light Bulb
题目大意: 求L的最大值 思路: 可以想象出是一个关于人到灯泡距离x的单峰上凸函数 当光线在墙角左边的时候影子在不断增长 然后通过相似可以推出人在墙上影子的长度为:H+D*(h-H)/x 再加上地上的 ...
- bzoj4869
http://www.lydsy.com/JudgeOnline/problem.php?id=4869 终于A了...参考了下dalao的代码... 拓展欧几里得定理,改了几次就不变了,但是用的时候 ...
- Ueditor 单独使用上传图片及上传附件方法
1 <script type="text/plain" id="upload_ue"></script> 2 <script ty ...
- MARK ZUCKERBERG, A letter to our daughter(转)
A letter to our daughter MARK ZUCKERBERG·WEDNESDAY, DECEMBER 2, 2015 Dear Max, Your mother and I ...
- 解决phpmyadmin数据文件导入有限制的问题(只能导入2M以下)
修改配置php.ini文件中三个参数: 1.upload_max_filesize 2.memory_limit 3.post_max_size 建议根据实际需要进行设置.
- 使用frp工具实现内网的穿透以及配置多个ssh和web服务
frp简介 FRP 项目地址 https://github.com/fatedier/frp/blob/master/README_zh.md frp 是一个可用于内网穿透的高性能的反向代理应用,支持 ...
- VF 查表
题目的意思就是 给你一个数字 n (1~81) 然后问你从 1~10^9 之中有多少个 各位数字之和等于 n 的 数字 我上去 打表了 而且速度还差不多 , 能在 几十分钟内算出来所有答案 ...