React中简单实现路由守卫(主要演示其原理)
2023-12-15 11:35:42
路由守卫在后台管理系统两种经典的跳转情况:
- ? ? 如果访问的是登录页面, 并且有token, 跳转到首页
- ? ? 如果访问的不是登录页面,并且没有token, 跳转到登录页
- ? ? 其余的都可以正常放行
下面简单实现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
总结:路由守卫其实是一个根据登录状态返回不同组件的组件
文章来源:https://blog.csdn.net/qq_44848480/article/details/135010363
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!