react 实现路由拦截

简单介绍下项目背景,我这里做了一个demo,前端使用mock数据,然后实现简单的路由拦截,校验session是否包含用户作为已登录的依据,react-router-dom是v6。不像vue可以设置登录拦截beforeenter,react需要我们自己加。

javascript 复制代码
//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 />
    },
]
javascript 复制代码
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组件懒加载的时候,路由跳转了,由于网络原因,组件内容无法及时过去,不添加会报错。

相关推荐
神仙别闹16 小时前
基于C语言实现B树存储的图书管理系统
c语言·前端·b树
玄魂17 小时前
如何查看、生成 github 开源项目star 图表
前端·开源·echarts
前端一小卒17 小时前
一个看似“送分”的需求为何翻车?——前端状态机实战指南
前端·javascript·面试
syt_101317 小时前
Object.defineProperty和Proxy实现拦截的区别
开发语言·前端·javascript
遝靑18 小时前
Flutter 跨端开发进阶:可复用自定义组件封装与多端适配实战(移动端 + Web + 桌面端)
前端·flutter
cypking18 小时前
Web前端移动端开发常见问题及解决方案(完整版)
前端
长安牧笛18 小时前
儿童屏幕时间管控学习引导系统,核心功能,绑定设备,设时长与时段,识别娱乐,APP超时锁屏,推荐益智内容,生成使用报告,学习达标解锁娱乐
javascript
老前端的功夫18 小时前
Vue 3 vs Vue 2 深度解析:从架构革新到开发体验全面升级
前端·vue.js·架构
栀秋66618 小时前
深入浅出链表操作:从Dummy节点到快慢指针的实战精要
前端·javascript·算法
狗哥哥18 小时前
Vue 3 动态菜单渲染优化实战:从白屏到“零延迟”体验
前端·vue.js