利用react-router4的react-router-config做路由鉴权
文章来源:https://segmentfault.com/a/1190000015282620
一、react-router-config 是一个帮助我们配置静态路由的小助手。
其源码就是一个高阶函数 利用一个map函数生成静态路由
1 | import React from "react"; |
//router.js 假设这是我们设置的路由数组(这种写法和vue很相似是不是?)
1 | const routes = [ |
//app.js 那么我们在app.js里这么使用就能帮我生成静态的路由了
1 | import { renderRoutes } from 'react-router-config' |
扯了半天,要如何利用这个插件帮我们路由鉴权呢?
用过vue的小朋友都知道,vue的router.js 里面添加 meta: { requiresAuth: true }
然后利用导航守卫
1 | router.beforeEach((to, from, next) => { |
二、基于类似vue的路由鉴权想法,我们稍稍改造一下react-router-config
// utils/renderRoutes.js
1 | import React from 'react' |
修改后的源码增加了两个参数 authed 、 authPath 和一个属性 route.requiresAuth
然后再来看一下最关键的一段代码
1 | if (!route.requiresAuth || authed || route.path === authPath) { |
很简单 如果 route.requiresAuth = false 或者 authed = true 或者 route.path === authPath(参数默认值’/login’)则渲染我们页面,否则就渲染我们设置的authPath页面,并记录从哪个页面跳转。
相应的router.js也要稍微修改一下
1 | const routes = [ |
//app.js
1 | import React from 'react' |
以上~修改了部分源码并完成了我们想要的效果。