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 路由按需加载的更多相关文章

  1. react16 路由按需加载、路由权限配置

    1. 路由按需加载: 不做按需加载,代码全部打包在bundle.js 文件里,首屏渲染很慢,项目文件较多,会出现1分钟加载的可能性. import React, { Component } from ...

  2. react路由按需加载方法

    使用router4之后以前的按需加载方法require.ensure 是不好使了. 所以我们改用react-loadable插件做按需加载. 第一步: yarn add react-loadable ...

  3. react 实现路由按需加载

    import() 方法: async.js 文件内容: import React from 'react'; // import "babel-polyfill"; //compo ...

  4. vue中路由按需加载的几种方式

    使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hello' import ...

  5. vue 动态路由按需加载的三种方式

    在Vue项目中,一般使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hell ...

  6. 【koa2基础框架封装】基于Proxy路由按需加载器和初始加载器

    我们在使用koa2做路由拦截后一般都习惯于直接将查找对应处理函数的过程映射到项目的文件夹目录,如: router.get('/test', app.controller.index.test); ap ...

  7. vue学习指南:第十二篇(详细) - Vue的 路由 第二篇 ( 路由按需加载(懒加载))

    各位朋友 因 最近工作繁忙,小编停更了一段时间,快过年了,小编祝愿 大家 事业有成 学业有成 快乐健康 2020开心过好每一天.从今天开始 我会抽时间把 Vue 的知识点补充完整,以及后期会带给大家更 ...

  8. vue项目实现路由按需加载的3种方式

    vue异步组件技术 ==== 异步加载vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 .但是,这种情况下一个组件生成一个js文件 /* vue异步组件技术 */ { ...

  9. react中create-react-app配置antd按需加载(方法二)

    1.yarn add babel-plugin-import 2.在根目录下的package.json下的bable中添加相应代码 "babel": { "presets ...

随机推荐

  1. SICP习题练习

    练习1.6 new-if的三个参数会先被执行,这样就会无限循环下去 练习1.7 (define (sqrt-iter last-guess guess x) (if (good-enough? las ...

  2. js鼠标事情

    js鼠标事情 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=" ...

  3. 【HDU4706】Children's Day

    http://acm.hdu.edu.cn/showproblem.php?pid=4706 水题,也不知道有没有spj // <4706.cpp> - 11/03/16 14:11:21 ...

  4. mac ox终端显示 bogon的问题

    mac终端显示如果正常应该是电脑名称(偏好设置-共享)的,但是细心的我们会发现,当电脑换了网络环境之后,可能就会出现终端上显示为主机名为:bogon,一查bogon这个单词是虚拟.虚伪的意思.     ...

  5. ORACLE分区表发挥性能

    1.1 分区表PARTITION table 在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能. 1.1.1 分区表的建立: 某公司的每年产生巨大的销售记录,DBA向公司建议 ...

  6. sql让时间调前,调后的语句

    时间调前,调后 select billid,DATEADD(mm,2,billdate) from bi_Bill 注:用dateadd(/时间年/月/日,调前或后多少,字段) mm为月份,2为调前两 ...

  7. Netty,Thrifty

    小白科普:Netty有什么用? https://mp.weixin.qq.com/s/PTKnRQ_hLf8BBPYnywLenA Thrifty 是基于.net Attribute 实现了标准 Th ...

  8. bzoj 1016: [JSOI2008]最小生成树计数【dfs+克鲁斯卡尔】

    有一个性质就是组成最小生成树总边权值的若干边权总是相等的 这意味着按边权排序后在权值相同的一段区间内的边能被选入最小生成树的条数是固定的 所以先随便求一个最小生成树,把每段的入选边数记录下来 然后对于 ...

  9. php编译安装参数详解

    ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/loc ...

  10. EditText(5)如何控制输入键盘的显示方式及参数表

    参考: https://developer.android.com/training/keyboard-input/visibility.html 1,进入Activity时,EditText就获得焦 ...