什么是路由守卫?

路由跳转前做一些验证,比如登录验证,是网站中的普遍需求
导航守卫(navigation-guards)这个名字,听起来怪怪的,但既然官方文档是这样翻译的,就姑且这么叫吧

privateRoute.tsx

我们在src/util下面增加了一个路由守卫的工具,只需要把他引入到您的router文件中,替换之前的route组件即可

具体实现

  1. import { Route, Redirect, RouteProps } from 'react-router-dom';
  2. import * as React from "react";
  3. export interface PrivateRouteProps extends RouteProps {
  4. component: React.ComponentType<any>
  5. isSignIn: boolean
  6. isIndex?: boolean
  7. }
  8. export const PrivateRoute = (props: PrivateRouteProps) => {
  9. let { component: Component, isSignIn, ...rest } = props;
  10. return (
  11. <Route
  12. { ...rest }
  13. render = { props => isSignIn === true ? <Component { ...props } /> : <Redirect to='/login' />}
  14. />)
  15. }

主要是对Route做了一次简单封装,可在App.tsx验证用户是否拥有访问权限,若为false 则强制跳转/login