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 ...
随机推荐
- java图片处理工具之-ImageMagick+jmagick(二)
简单的图片处理測试类: public class ImageUtil { static{ System.setProperty("jmagick.systemclassl ...
- [办公应用]如何制作二Y轴图(excel)
有时候我们会遇到一种图表,就是X轴一致,可是Y轴的数据相差很大.如下图中,年龄和收入就不是一个数量级,在图表中显示的时候,“年龄”的曲线根本看不到(表中数据仅供举例): 解决的方法就是使用双Y轴显示, ...
- URL 字段简析
URL:统一资源定位符:URL是uri的一个子集,另外一个子集是URN. URL语法:(来自HTTP权威指南中文版P29) 组件 描述 默认值 方案 访问服务器以获取资源时要使用哪种协议 无 用户 某 ...
- LAMP安装问题【已解决】
1.编译不通过提示cannot find mysql header files under /usr/local/mysql解决办法:修改./configuer --with-mysql=/usr/ ...
- vim升级到8.0
1.卸载 sudo apt-get remove --purge vim 2.添加8.0的vim源并安装 sudo add-apt-repository ppa:jonathonf/vim sudo ...
- Recyclerview 顶部悬停 stick
activity布局 ll_top代表要悬停的部分 这里面我放了 图片和文本 1 <?xml version="1.0" encoding="utf-8&qu ...
- Unity3D游戏,TCP,WEBCOSKT,HTTP通信架构 weaving-socket
weaving-socket 详细介绍 项目简介 2017-8-8:新发布功能 增加U3D游戏客户的通讯项目支持,并提供示例内容. 2017-5-5: 新发布 weaving-socket 架构的.n ...
- gitweb
1. 简介 Gitweb提供了git版本库的图形化web浏览功能.可以到网站http://git.kernel.org/体验下效果,如下图所示. Gitweb界面 它既可以通过配置架设于web服务器上 ...
- java笔记线程方式1优先级
* 我们的线程没有设置优先级,肯定有默认优先级. * 那么,默认优先级是多少呢? * 如何获取线程对象的优先级? * public final int getPriority():返回线程对象的优 ...
- source命令用法(转载)
转自:http://zhidao.baidu.com/link?url=mNfsPHSjTEm7llgyMYx0UVNwkJmD_cxLeHtZnHcM6Ms8LDXofVHka_EzHi6GltbR ...