最近在肝一个后台管理项目,用的是react18 + ts 路由用的是v6,当需要实现根据权限动态加载路由表时,遇到了不少问题。 v6相比于v5做了一系列改动,通过路由表进行映射就是一个很好
最近在肝一个后台管理项目,用的是react18 + ts 路由用的是v6,当需要实现根据权限动态加载路由表时,遇到了不少问题。 v6相比于v5做了一系列改动,通过路由表进行映射就是一个很好的改变(个人认为),但是怎么实现根据权限动态加载路由表呢?我也是网站上找了许多资料发现大部分还是以前版本的动态路由,要是按照现在的路由表来写肯定是不行的。难不成又要写成老版本那样错综复杂?只能自己来手写一个了,如有更好的方法望大佬们不吝赐教。 思路大致思路就是:先只在路由表配置默认路由,例如登录页面,404页面。再等待用户登录成功后,获取到用户权限列表和导航列表,写一个工具函数递归调用得出路由表,在根据关键字映射成组件,最后返回得到新的路由表。 流程如下
纸上谈来终觉浅,实际来看看吧。 实现动态路由router/index.ts 默认路由
redux login/action.ts注意带 //import! 的标识每次导航列表更新时,再触发路由更新action handelFilterRouter 就是根据导航菜单列表 和权限列表 得出路由表的
utils 工具函数处理说一说我这里为什么要映射element 成对应组件这部操作,原因是我使用了redux-persist(redux持久化), 不熟悉这个插件的可以看看我这篇文章:redux-persist若是直接转换后存入本地再取出来渲染是会有问题的,所以需要先将element保存成映射路径,然后渲染前再进行一次路径映射出对应组件。 每个后台的数据返回格式都不一样,需要自己去转换,我这里的转换仅供参考。ps:defaulyRoutes和默认router/index.ts导出是一样的,可以做个小优化,复用起来。
App.tsx
|
2021-06-04
2019-01-10
2019-02-17
2021-09-12
2021-09-30