react16 路由按需加载、路由权限配置
1. 路由按需加载:
不做按需加载,代码全部打包在bundle.js 文件里,首屏渲染很慢,项目文件较多,会出现1分钟加载的可能性。
import React, { Component } from 'react';
import Loadable from 'react-loadable'; // 按需加载依赖包
import {HashRouter,Route,Switch} from "react-router-dom"
const Loading = () => <div>Loading...</div>;
const A = Loadable({ //A页面 按需加载处理
loader: () => import('../pages/page1'),
loading:Loading,
});
const B = Loadable({ // B页面 按需加载处理
loader: () => import('../pages/page2'),
loading:Loading,
});
class App extends Component {
render() {
return (
<HashRouter>
<Switch>
<Route exact path={"/a"} component={A}/> // 加载A组件
<Route exact path={"/b"} component={B}/>
<Route component={A}/>
</Switch>
</HashRouter>
);
}
}
export default App;
如此简单;
2.路由权限配置
场景:后台管理系统,有用户管理(增删改查),订单管理(发货,删除,修改,查看),资金流水(收益查看,提现)等一系列模块,不同身份的人注册登录进来,展示不同的模块;
思路: (1) 注册登录进来,获取此人的权限,配置相应的路由。(2)浏览器刷新,需重新获取此人的权限,配置路由。
import React, { Component } from 'react';
import Loadable from 'react-loadable';
import Permission from "./permission"
import {HashRouter,Route,Switch} from "react-router-dom"
const Loading = () => <div>Loading...</div>;
const A = Loadable({
loader: () => import('../pages/page1'),
loading:Loading,
});
const B = Loadable({
loader: () => import('../pages/page2'),
loading:Loading,
});
class App extends Component {
render() {
return (
<HashRouter>
<Switch>
<Route exact path={"/a"} component={A}/>
<Route exact path={"/b"} component={B}/>
<Route path={"/admin"} component={Permission}/> //需要权限访问的路由全部放置此组件里处理,permission组件
<Route component={A}/>
</Switch>
</HashRouter>
);
}
}
export default App;
permission组件
import React,{Component} from "react"
import {getPermissin} from "../actionCreaters"
import {Route,Switch} from "react-router-dom"
import {connect} from "react-redux"
import A from "../pages/page1"
class Permission extends Component{
render(){
if(this.props.permissions.length === 0 ){ //权限存储在redux中,如果只在登录或注册获取权限配置,刷新时,将被清空。所以实时的配置路由守卫里,当权限数组为空时,请求接口获取权限
this.props.requestForPermission();
return <div>请等待....</div>
}
const routers = this.props.permissions.map(item=>{ // 获取到权限进行路由配置
return <Route exact path={`/admin/${item.code}`} render={()=><div>欢迎{item.code}</div>} key={item.code}/>
});
return <Switch>
{routers}
<Route component={A}/> //匹配不到此路由,跳转到A组件
</Switch>;
}
}
export default connect((state)=>{
return {
permissions:state.author.permissions
}
},(dispatch)=>{
return {
requestForPermission(){
dispatch(getPermissin());
}
}
})(Permission);
如此简单;
接下来,什么项目都不怕啦~
react16 路由按需加载、路由权限配置的更多相关文章
- react-router 4.x 路由按需加载
react-router 4 代码分割(按需加载) 官方文档 https://serverless-stack.com/chapters/code-splitting-in-create-react ...
- vue中路由按需加载的几种方式
使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hello' import ...
- vue 动态路由按需加载的三种方式
在Vue项目中,一般使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hell ...
- react路由按需加载方法
使用router4之后以前的按需加载方法require.ensure 是不好使了. 所以我们改用react-loadable插件做按需加载. 第一步: yarn add react-loadable ...
- 【koa2基础框架封装】基于Proxy路由按需加载器和初始加载器
我们在使用koa2做路由拦截后一般都习惯于直接将查找对应处理函数的过程映射到项目的文件夹目录,如: router.get('/test', app.controller.index.test); ap ...
- vue项目实现路由按需加载的3种方式
vue异步组件技术 ==== 异步加载vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 .但是,这种情况下一个组件生成一个js文件 /* vue异步组件技术 */ { ...
- vue学习指南:第十二篇(详细) - Vue的 路由 第二篇 ( 路由按需加载(懒加载))
各位朋友 因 最近工作繁忙,小编停更了一段时间,快过年了,小编祝愿 大家 事业有成 学业有成 快乐健康 2020开心过好每一天.从今天开始 我会抽时间把 Vue 的知识点补充完整,以及后期会带给大家更 ...
- react 实现路由按需加载
import() 方法: async.js 文件内容: import React from 'react'; // import "babel-polyfill"; //compo ...
- webpack分包:vue单页面解决分包【减少首屏加载时间】--按需加载[路由懒加载]
1.使用webpack中的syntax-dynamic-import 插件 npm install --save-dev babel-plugin-syntax-dynamic-import 2.配置 ...
随机推荐
- python数据结构——线性表
线性表 线性表可以看作是一种线性结构(可以分为顺序线性结构,离散线性结构) 1. 线性表的种类: 顺序表 元素存储在一大块连续存储的地址中,首元素存入存储区的起始位置,其余元素顺序存放. (元素之间的 ...
- 使用IDEA创建maven web项目
1.打开idea-->configer-->setting-->build-->runner-->设置VM Options内添加-DarchetypeCatalog=in ...
- 六星教育php vip视频(分享)
最近看的一个swoole的课程,应该也算是vip课程了,不是公开的直播课 比较有特点有一定深度,swoole的实战教程一直也不多,结合swoole构建一个新型框架,最后讲解如何实现分布式RPC的调用. ...
- Factory Method工厂方法模式
定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类,属于创建型模式 在此模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生产 ...
- java生成二维码/java解析二维码
二维码的优缺点 优点:1. 高密度编码,信息容量大:2.编码范围广:3.容错能力强:4.译码可靠性高:5.可引入加密措施:6.成本低,易制作,持久耐用. 缺点:1.二维码技术成为手机病毒.钓鱼网站传播 ...
- 这可能是国内最全面的char RNN注释
char RNN代码来源于https://github.com/hzy46/Char-RNN-TensorFlow 前言 本人在学习char RNN的过程中,遇到了很多的问题,但是依然选择一行代码一行 ...
- Redis常用命令(Set、Hash、Zset)
1.Set(单值多value) 1. sadd.smembers key . > SADD set01 (integer) > SMEMBERS set01 ) " ) &quo ...
- 数据库(DDL,DML,DQL、DCL)
1.数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE 子句组成的查询块: SELECT <字段名表> FROM <表或视图名& ...
- HBase介绍、安装与应用案例
搭建环境 部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录下创建/app目录,用于存放 Hadoop等组件运行包.因为该目录用于安装hadoo ...
- 使用python合并excel
当工作碰到需要将几个excel合并时,比如一个表,收集每个人的个人信息,陆续收回来就是十几张甚至几十张表,少了还好解决,但是很多的话就不能一个一个去复制了,这时候就想到了python,Python大法 ...