React中简单实现路由守卫(主要演示其原理)

路由守卫在后台管理系统两种经典的跳转情况:

  1.     如果访问的是登录页面, 并且有token, 跳转到首页
  2.     如果访问的不是登录页面,并且没有token, 跳转到登录页
  3.     其余的都可以正常放行

下面简单实现React路由守卫功能(代码比较简单,主要演示其原理

具体代码如下:

import { useEffect } from 'react'
import { useRoutes, useLocation,useNavigate } from "react-router-dom"
import router from "./router"
import { message } from "antd"

// 去往登录页的组件
function ToLogin(){
  const navigateTo = useNavigate()
  useEffect(()=>{
    navigateTo("/login");
    message.warning("您还没有登录,请登录后再访问!");
  },[])
  return <div></div>
}

// 去往首页的组件
function ToPage1(){
  const navigateTo = useNavigate()
  useEffect(()=>{
    navigateTo("/home");
    message.warning("您已经登录过了!");
  },[])
  return <div></div>
}

// 手写封装路由守卫
function BeforeRouterEnter(){
  const outlet = useRoutes(router);
    const location = useLocation()
    let token = localStorage.getItem("lege-react-management-token");
    //1、如果访问的是登录页面, 并且有token, 跳转到首页
    if(location.pathname==="/login" && token){
      // 这里不能直接用 useNavigate 来实现跳转 ,因为需要BeforeRouterEnter是一个正常的JSX组件
      return <ToPage1 />
    }
    //2、如果访问的不是登录页面,并且没有token, 跳转到登录页
    if(location.pathname!=="/login" && !token){
      return <ToLogin />
    }
    return outlet
}


function App() {  
  return (
    <div className="App">
      {/* {路由守卫其实是一个根据登录状态返回不同组件的组件} */}
      <BeforeRouterEnter />
    </div>
  )
}

export default App

总结:路由守卫其实是一个根据登录状态返回不同组件的组件

相关推荐

  1. React简单实现守卫主要演示原理

    2023-12-16 10:42:02       36 阅读
  2. React导航守卫(V6)

    2023-12-16 10:42:02       38 阅读
  3. React Router v5 版本传参主要方式

    2023-12-16 10:42:02       10 阅读
  4. react 实现拦截

    2023-12-16 10:42:02       27 阅读
  5. vue - 守卫

    2023-12-16 10:42:02       14 阅读
  6. Vue守卫笔记

    2023-12-16 10:42:02       36 阅读
  7. vue-router(守卫)

    2023-12-16 10:42:02       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-16 10:42:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-16 10:42:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-16 10:42:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-16 10:42:02       20 阅读

热门阅读

  1. css实现文字下划线动效

    2023-12-16 10:42:02       41 阅读
  2. Matlab:自定义日期和时间的显示格式

    2023-12-16 10:42:02       42 阅读
  3. 基于SpringBoot的停车位预约管理系统

    2023-12-16 10:42:02       44 阅读
  4. Python 内置界面开发框架 Tkinter 入门指南

    2023-12-16 10:42:02       44 阅读
  5. Redisson分布式锁的实现原理(小白话)

    2023-12-16 10:42:02       41 阅读