很多时候,我们需要在中后台系统中加入页签功能,类似vue-router的缓存功能,我们的路由不依赖任何数据流库,如redux,mobx等,即插即用更重要的是能够与RouterPro无缝切换
路由管理配置
import { KeepRouter } from "react-router-pro";
//这个是用来生成一个Map数据的函数
let createMap = (arr, type = 'id') => {
let Maps = new Map();
for (let i of arr.keys()) {
if (type) {
Maps.set(arr[i][type], arr[i]);
} else
Maps.set(i, arr[i]);
}
}
return Maps;
};
//项目全量的路由字典,很多初次接触的人会疑问
export const urlCompEnum = createMap(
[
{
alias: "home",
des: "主页",
component: Index,
},
{
alias: "SettingUser",
des: "用户设置",
component: SettingUser,
},
{
alias: "SettingAuth",
des: "权限管理",
component: SettingAuth,
},
{
alias: "SettingRole",
des: "角色设置",
component: SettingRole,
},
{
alias: "SettingEnum",
des: "枚举设置",
component: SettingEnum,
}
]
//从服务器拉取到的用户权限的对象数组,下面的例子是只有一个权限
let data = [{id: 1, parentId: 2, code: "test", name: "用户设置", zh_CN: "用户设置", en_US: "UserSetting"}]
let index = (props) => {
return (
<KeepRouter
//配置服务器返回的当前用户所能访问的路由
data={data}
//配置我们的真实component的字典
compEnum={urlCompEnum}
//包裹在我们整体项目最外层的固定组件,比如中后台系统的大的框
HomeComp={Home}
//404页面
NotFound={NotFound}
//403无权限时返回的页面
NoAuth={NoAuth}
//判断data数据中是路由的函数
isRouter={(data) => {
return !data.isShow;
}}
/>
)
}
页面中配置与使用
配置结束了,一般中后台系统还会需要在页面顶部实现一个页签的功能,页签需要一个当前已缓存的路由的列表,以及能够关闭一个缓存页面的函数,看以下的示例
import { NavUp } from "anup";
//NavUp是一个第三方的页签组件,用户如果需要的话可以自行实现或者寻找开源作品
let index = (props) => {
const { routerActData, routerMinusDispatch } = props;
//routerActData:是当前最新路由的对象数据
//routerMinusDispatch:是一个函数,传入一个当前要关闭的路由数据,将会自动关闭一个缓存路由
return (
<NavUp
routerMinusDispatch={routerMinusDispatch}
routerActData={routerActData}
history={history}
/>
)
}
git地址:地址