react实现路由拦截的示例代码
更新时间:2024年02月19日 10:35:37 作者:Goat恶霸詹姆斯
这篇文章主要介绍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 }
Surpense组件是react组件懒加载的时候,路由跳转了,由于网络原因,组件内容无法及时过去,不添加会报错。
到此这篇关于react实现路由拦截的示例代码的文章就介绍到这了,更多相关react路由拦截内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
一篇文章介绍redux、react-redux、redux-saga总结
这篇文章主要介绍了一篇文章介绍redux、react-redux、redux-saga总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-05-05React Hook useState useEffect componentD
这篇文章主要介绍了React Hook useState useEffect componentDidMount componentDidUpdate componentWillUnmount问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-03-03详解create-react-app 自定义 eslint 配置
这篇文章主要介绍了详解create-react-app 自定义 eslint 配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-06-06
最新评论