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

react+andDesign+vite+ts从零搭建后台管理系统(二)-reactRouter

在这里插入图片描述
在这里插入图片描述

router安装

react-router官网

npm i react-router-dom

文件创建

在项目目录下创建对应的router文件夹,创建对应的文件
在这里插入图片描述

modules文件

将所有菜单菜单以一级目录拆成多个文件,使用import.meta.glob将路由模块批量导入

  • 单个文件的配置
import Layout from '@/layouts/index';
// 系统设置
import File from '@/views/system/File/index'
import Dict from '@/views/system/dict/index'
import DictItem from '@/views/system/dictItem'const SystemSettingRouter = [{meta: { title: '系统设置'},element: <Layout />,children: [{path: '/system/file',meta: {title: '文件管理',requiresAuth: true},element: <File />},{path: '/system/dict',meta: { title: '数据字典',requiresAuth: true,},element: <Dict />},{path: '/system/dictItem',meta: { title: '数字字典项',requiresAuth: true,hidden: true},element: <DictItem />}]},
]export default SystemSettingRouter

routes文件

import type { RouteObject } from '@/router/interface'
import Login from '@/views/Login/index'// 导入所有router
const metaRouters = import.meta.glob('./modules/*.tsx', { eager: true })
// * 处理路由
export const routerArray: RouteObject[] = [];
Object.keys(metaRouters).forEach(item => {const moduleRoutes = metaRouters[item] as Record<string, any>;Object.keys(moduleRoutes).forEach((key: any) => {if (Array.isArray(moduleRoutes[key])) {routerArray.push(...moduleRoutes[key]);}});
});
export const routes: RouteObject[] = [{path: '/login',meta: { requiresAuth: false,title: '登录',},element: <Login />},...routerArray,
]

router入口文件 index.tsx

import { useRoutes, type RouteObject } from "react-router-dom";
import { routes } from './routes'
const Router = () => {const router = useRoutes(routes as RouteObject[]);return router;
};export default Router

路由守卫

使用高阶组件(AuthRouter)进行对需要鉴权的路由进行包裹

import { useLocation, Navigate } from "react-router-dom";
import { searchRoute } from "@/utils";
import { getToken } from '@/utils/auth'
import { routes } from "@/router/routes";const AuthRouter = (props) => {const { pathname } = useLocation();const route = searchRoute(pathname, routes);// * 判断当前路由是否需要访问权限(不需要权限直接放行)if (!route.meta?.requiresAuth) return props.children;  // 判断是否有tokenif (!getToken()) return <Navigate to="/login" replace />;return props.children
}export default AuthRouter;

根目录文件 App.tsx

import Router from "@/router/index"
import AuthRouter from "@/router/utils/AuthRouter"
import { HashRouter } from "react-router-dom";
const App = () => {return (<HashRouter><AuthRouter><Router /></AuthRouter></HashRouter>)
}
http://www.dtcms.com/a/461995.html

相关文章:

  • @uiw/react-md-editor渲染的markdown如何跳转至指定地方?我来助你
  • Reactor模型和类图设计
  • 包头网站建设易通null wordpress theme
  • 项目外包公司可以去吗九江市seo
  • 专题四:前缀和~
  • C++八股 —— 线程本地存储技术
  • 位运算题5:出现k次与出现1次
  • 我们为什么需要Agent?
  • MLMs之Sora:Sora 2(开启真实物理与创意融合的新一代视频生成平台)的简介、安装和使用方法、案例应用之详细攻略
  • (1)100天python从入门到拿捏
  • 昆明网站定制制作logo网站
  • 个人做哪方面的网站网站续费怎么做
  • Differential evolution with collective ensemble learning
  • 东莞网站推广策划wordpress怎么改标题和meta
  • jquery mvvm框架
  • 做外贸的几个网站如何添加网站白名单
  • 统一 IT 服务台平台:让企业服务运转更高效
  • 在线做c语言题目的网站免费自助在线公司起名
  • 70行代码展现我的“毕生”编程能力
  • C++ List
  • 从指令到智能:大型语言模型提示词工程与上下文工程的综合分析
  • wordpress清理过期文件夹电商seo
  • html网站尺寸成立公司需要哪些资料
  • 物联网边缘节点中的MEMS传感器低功耗设计实战
  • 当工业生产遇上RFID:智能追溯让制造全流程“透明可见”
  • LeetCode 刷题【109. 有序链表转换二叉搜索树】
  • 建设企业网站模板下载黑龙江省建设工程质量安全协会网站
  • VMware 安装 Ubuntu 24.04(稳定版本) 母胎教学
  • 巴城镇建设网站微信微网站制作公司
  • Linux 系统配置 NTP 服务:轻松同步阿里云时间服务器