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 ...
随机推荐
- 用block变量来对字符数组对象进行排序
<span style="font-size:18px;">降序排序</span> <span style="font-size:18px; ...
- HDUOJ Number Sequence 题目1005
/*Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- Poj 3233 矩阵快速幂,暑假训练专题中的某一道题目,矩阵快速幂的模板
题目链接 请猛戳~ Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 ...
- 迟到的WC2019打铁祭
这是我最失败的一次考试... 具体过程就不说了,全程划水,掉线.还是自身实力不行啊. 最后文艺汇演,本人是DL24主唱&&rapper,欢迎大家交友.^_^.
- 4.9 Parser Generators
4.9 Parser Generators This section shows how a parser generator can be used to facilitate the constr ...
- POJ2208 Pyramids 四面体体积
POJ2208给定四面体六条棱(有序)的长度 求体积 显然用高中立体几何的方法就可以解决. 给出代码 #include<iostream> #include<cstdio> # ...
- DTV_SI 汇总 & 兼谈LCN
前言 本章主要对数字广播DVB做一个系统的概况的描述,以及一些spc的相关的内容,虽然流程分析的不多,但是做为后续 章节资料的源泉,也是不可或缺的. 一. ATSC和DVB数字电视系统的比较 本文的主 ...
- iOS核心动画以及UIView动画的介绍
我们看到很多App带有绚丽狂拽的特效,别出心裁的控件设计,很大程度上提高了用户体验,在增加了实用性的同时,也赋予了app无限的生命力.这些华丽的效果很多都是基于iOS的核心动画原理实现的,本文介绍一些 ...
- 【高德地图API】地理编码与逆地理编码
一.地理编码 该功能实现地理编码服务,即地址匹配,从已知的地址描述到对应的经纬度坐标的转换,即根据地址信息,查询该地址所对应的点坐标等,地址(address) 为必选项,城市(city)为可选项. & ...
- P2746 [USACO5.3]校园网Network of Schools(Tarjan)
P2746 [USACO5.3]校园网Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意即使 ...