当前位置: 首页 > news >正文

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 } = propsconst username = sessionStorage.getItem('username')console.log(props);useEffect(() => {if (route.props.match.pathname === "/login" && username) {navigate('/index')}}, [route, navigate,username])return children
}

Surpense组件是react组件懒加载的时候,路由跳转了,由于网络原因,组件内容无法及时过去,不添加会报错。 

http://www.lryc.cn/news/301360.html

相关文章:

  • 数据分析(一) 理解数据
  • 什么是 Flet?
  • 多模态(三)--- BLIP原理与源码解读
  • 掌握高性能SQL的34个秘诀多维度优化与全方位指南
  • 美国纳斯达克大屏怎么投放:投放完成需要多长时间-大舍传媒Dashe Media
  • 【MySQL】多表关系的基本学习
  • Springboot之接入gRPC
  • 2023年中国数据智能管理峰会(DAMS上海站2023):核心内容与学习收获(附大会核心PPT下载)
  • DS:八大排序之堆排序、冒泡排序、快速排序
  • Sora:继ChatGPT之后,OpenAI的又一力作
  • 阅读笔记(BMSB 2018)Video Stitching Based on Optical Flow
  • Ubuntu学习笔记-Ubuntu搭建禅道开源版及基本使用
  • 《苍穹外卖》知识梳理6-缓存商品,购物车功能
  • [NSSCTF]-Web:[SWPUCTF 2021 新生赛]easy_sql解析
  • vue3 codemirror yaml文件编辑器插件
  • 力扣经典题:环形链表的检测与返回
  • 【web | CTF】BUUCTF [BJDCTF2020]Easy MD5
  • spring boot Mybatis Plus分页
  • elementui 中 el-date-picker 控制选择当前年之前或者之后的年份
  • GlusterFS:开源分布式文件系统的深度解析与应用场景实践
  • 第6个-滚动动画
  • 配置oracle连接管理器(cman)
  • [N-142]基于springboot,vue停车场管理系统
  • DAY53:动态规划(买股票的最佳时机)
  • 快速实现用户认证:使用Python和Flask配合PyJWT生成与解密Token的教程及示例代码
  • 外汇110:外汇做空是什么意思?如何运作?一文读懂
  • 【记录】个人博客或笔记中的数学符号设定
  • Redis Sentinel工作原理
  • GEE入门篇|遥感专业术语:理论介绍
  • react中如何做到中断diff过程和恢复