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

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

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

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

具体代码如下:

javascript 复制代码
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

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

相关推荐
码艺-Alimjan27 分钟前
Tauri 源码备份 · 打包 & 解压 总结,源码收集之路
前端·javascript·vue.js
小马不起床28 分钟前
零基础玩转 FastAPI_11:前端后台管理页面
前端·状态模式·fastapi
子非鱼a2 小时前
【文件上传】一个普普通通的edu16
前端
美狐美颜SDK开放平台2 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
pride.li3 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
屏什么录3 小时前
电脑如何录屏幕视频和声音?从工具到代码,7 种方案帮你彻底搞定
前端·音视频开发
用户360055579003 小时前
Kestrel_VLLM_CUDA -09 · full-GPU decode:单 token 全设备
前端
kyriewen3 小时前
我上手了 Vite+ 1.0:Node 不用自己装,lint 却翻车了
前端·javascript·程序员
松就是我902983 小时前
你的 PPT 不缺内容,缺一个讲它的人
前端
松就是我902983 小时前
别再熬夜做 PPT 了!输入一个主题,AI 帮你把整套幻灯片做好,还能随便改字
前端