
分享一个react路由小案例:分享在项目中,如何实现路由拦截的。
做了一个demo,前端使用mock数据,然后实现简单的路由拦截,校验Session是否包含用户作为已登录的依据,react-router-dom是v6。不像vue可以设置登录拦截beforeenter,react需要我们自己加。
//Router.JS import React, { lazy } from "React"; import { Navigate } from 'react-router-DOM' const error = lazy(() => import("@/pages/Error/Error.JSX")) const Index = lazy(() => import("@/pages/Index/Index.jsx")) const Login = lazy(() => import("@/pages/Login/Login.jsx")) Export const routes = [ { path: "/", element: <Navigate to="/index"/> }, { path: "/login", element: <Login /> }, { path: "/index", element: <Index /> }, { path: "*", element: <Error /> }, ]
import React, { useEffect, Suspense } from 'react'
import { useRoutes, useNavigate } from 'react-router-dom'
import { routes } from './router'
export default function Index() {
const element = useRoutes(routes)
return (
<Authen route={element} children={element.children}>
<Suspense>
<div>{element}</div>
</Suspense>
</Authen>
)
}
//实现路由拦截
const Authen = (props) => {
const navigate = useNavigate()
const { route, children } = props
const username = sessionStorage.getItem('username')
console.log(PRops);
useEffect(() => {
if (route.props.match.pathname === "/login" && username) {
navigate('/index')
}
}, [route, navigate,username])
return children
} 





网友评论文明上网理性发言 已有0人参与
发表评论: