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

 1. 路由按需加载:react

  不作按需加载,代码所有打包在bundle.js 文件里,首屏渲染很慢,项目文件较多,会出现1分钟加载的可能性。redux

  

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.路由权限配置浏览器

  场景:后台管理系统,有用户管理(增删改查),订单管理(发货,删除,修改,查看),资金流水(收益查看,提现)等一系列模块,不一样身份的人注册登陆进来,展现不一样的模块;react-router

   思路: (1) 注册登陆进来,获取此人的权限,配置相应的路由。(2)浏览器刷新,需从新获取此人的权限,配置路由。dom

  

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组件this

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);

  如此简单;spa

接下来,什么项目都不怕啦~code

相关文章
相关标签/搜索