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.配置 ...
随机推荐
- @PathVariable性能损耗分析
前端时间参与了一次业务线排障,是接口服务并发性能比较差,性能损耗大的问题,我经过几次研究分析和压测,确定了故障源是@PathVariable耗时过长引起的. @PathVariable使用形式: @R ...
- Day004_Linux基础命令之特殊符号与正则表达式通配符
特殊符号: . 点 cd . 表示当前目录 ' '' 单引号,所见即所得 原封不动输出 " ""双引号,里面的特殊符号会被解析运行 `` ====$( ) 先运行() 里 ...
- String对象为什么不可变
转载:https://www.cnblogs.com/leskang/p/6110631.html 一.什么是不可变对象? As we all know, 在Java中, String类对象是不可变的 ...
- EditPlus5.0破解激活
永久激活用户名激活码: 用户名:Vovan注册码:3AG46-JJ48E-CEACC-8E6EW-ECUAW 然后重启软件即可
- linux常用命令三
linux常用命令三 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 ...
- 解决The mysql extension is deprecated and will be removed
今天打开网站突然发现报错:“PHP Deprecated: mysql_connect(): The mysql extension is deprecated and will be remove ...
- android 拍照 相册 剪切以及显示功能
一.概述 android的 图片拍照 ,相册选图,以及图片剪切功能可以说非常常用. 尤其是图片上传功能,必然用到此功能. 而公司最近的一个项目中正好用到该功能. 记录下来以便以后再次用到,直接拿来使用 ...
- 译 .NET Core 3.0 发布
原文:<Announcing .NET Core 3.0> 宣布.NET Core 3.0 发布 很高兴宣布.NET Core 3.0的发布.它包括许多改进,包括添加Windows窗体和W ...
- 深入理解Three.js中正交摄像机OrthographicCamera
前言 在深入理解Three.js中透视投影照相机PerspectiveCamera那篇文章中讲解了透视投影摄像机的工作原理以及对应一些参数的解答,那篇文章中也说了会单独讲解Three.js中另一种常用 ...
- Django安装与简单事例-02
Django的下载与基本命令 1.下载Django: 1 pip3 install django 2.创建一个django project 1 django-admin.py startproject ...