React使用路由表

目录

前言

实现步骤

1. 安装依赖

2. 创建路由配置文件

高级配置

嵌套路由配置

对比两种配置方式

传统 JSX 方式

路由表方式优势

完整功能示例

带路由守卫的配置

注意事项

总结


前言

React Router 从 v6 版本开始支持类似 Vue 的集中式路由表配置方式,通过 useRoutes Hook 可以将路由配置统一管理。这种方式相比传统的 JSX 声明式路由更加简洁,特别适合中大型项目。


实现步骤

1. 安装依赖

npm install react-router-dom

2. 创建路由配置文件

新建 src/router/index.jsx

import { lazy } from 'react'
import { Navigate } from 'react-router-dom'const Home = lazy(() => import('../views/home'))
const Login = lazy(() => import('../views/login'))const routes = [{path: '/',element: <Navigate to='/home' /> // 重定向},{path: '/home',element: <Home />},{path: '/login',element: <Login />},{path: '*', // 匹配其他路由element: <div>404</div>}
]export default routes;

修改main.jsx

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import { BrowserRouter } from 'react-router-dom'
import './index.css'
import App from './App.jsx'createRoot(document.getElementById('root')).render(<StrictMode><BrowserRouter><App /></BrowserRouter></StrictMode>,)

修改App.jsx

import { useState, Suspense } from 'react'
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'
import routes from './router/index'
import { useRoutes } from 'react-router-dom'function App() {const [count, setCount] = useState(0)const element = useRoutes(routes)return (<><Suspense fallback={<div>加载中...</div>}>{element}</Suspense></>)
}export default App

高级配置

嵌套路由配置

const routes = [{path: '/dashboard',element: <DashboardLayout />,children: [{index: true,element: <DashboardIndex />},{path: 'settings',element: <DashboardSettings />}]}
]

在布局组件中使用 <Outlet />

// DashboardLayout.jsx
import { Outlet } from 'react-router-dom'export default function DashboardLayout() {return (<div><h1>Dashboard</h1><Outlet /></div>)
}

对比两种配置方式

传统 JSX 方式

<Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} />
</Routes>

路由表方式优势

  1. 集中管理所有路由配置

  2. 更清晰的路由层级结构

  3. 方便实现路由守卫等统一逻辑

  4. 易于维护和扩展


完整功能示例

带路由守卫的配置

const routes = [{path: '/admin',element: <AuthGuard><AdminLayout /></AuthGuard>,children: [{path: 'dashboard',element: <AdminDashboard />}]}
]// 路由守卫组件
function AuthGuard({ children }) {const isLogin = /* 你的登录状态判断逻辑 */return isLogin ? children : <Navigate to="/login" replace />
}

注意事项

  1. element 属性必须直接传递 JSX 元素

  2. 使用 index: true 代替 path: "" 配置默认子路由

  3. 动态参数使用 :param 语法

  4. 导航使用 useNavigate Hook


总结

通过使用 useRoutes + 集中式路由表的方式,React 也可以实现类似 Vue Router 的路由配置体验。这种方式特别适合需要统一管理路由逻辑的项目,开发者可以根据项目需求灵活选择传统声明式或集中式配置方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36513.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(位运算 水题?407周赛题?o 使两个整数相等的位更改次数)leetcode 3226

思路 &#xff1a;灵茶山艾府 怎么判断n能构成k直接异或取1的数量就行 关键在于如何判断n无法构成k 按照灵茶山大佬的方案一就是让k是n的子集也就是n与k的交集等于k 不等于k就不是n的子集 &#xff08;当k是n的子集时 n能构成k&#xff09; 与运算取交集&#xff0c;或运算取…

使用DDR4控制器实现多通道数据读写(四)

在创建完DDR4的仿真模型后&#xff0c;我们为了实现异步时钟的读写&#xff0c;板卡中在PL端提供了一组差分时钟&#xff0c;可以用它通过vivado中的Clock Wizard IP核生成多个时钟&#xff0c;在这里生成两个输出时钟&#xff0c;分别作为用户的读写时钟&#xff0c;这样就可以…

Linux 文件操作-标准IO函数4-fseek设置文件偏移量、ftell获取当前偏移量、rewind使文件偏移量(为0)定位到开头

目录 1.fseek设置文件偏移量 2.ftell获取当前偏移量 3.rewind使文件偏移量&#xff08;为0&#xff09;定位到开头 4.程序验证 1.fseek设置文件偏移量 函数原型&#xff1a; /* 功能&#xff1a;设置文件位置指针的偏移量 参数&#xff1a; stream&#xff1a;文件指针 of…

JavaEE的知识记录

内容很多可以通过目录进行查找对应的内容。 目录 一、注解 元注解 RequestMapping 路由映射注解 RequestParam绑定请求参数到可控制器方法的参数 请求参数绑定可控制方法参数&#xff1a; 参数绑定重命名 RequestBody请求正文注解 ResponseBody响应体正文注解 PathVar…

带旋转的目标标注工具-X-AnyLabeling

在之前的文章中&#xff0c; 分别介绍过3款标注工具&#xff1a; 目标检测&#xff0c;语义分割标注工具–labelimg labelme智能标注工具 T-Rex Label 对于2D目标检测标注&#xff0c; 上面的工具只能标注不带旋转的检测框。但是如果我们要进行带旋转方向的检测&#xff08;O…

Javascript基础

目录 1. 变量声明2. 基本数据类型3.复杂数据类型4.字符串方法5.对象方法6.时间方法7.条件&#xff08;if&#xff09;8.循环&#xff08;for/while&#xff09;9.遍历&#xff08;for in/of&#xff09;10.多选&#xff08;Switch&#xff09;END 1. 变量声明 const&#xff1…

设计模式之建造者模式

目录 1. 概念 2. 代码实现 3. 应用场景 建造者模式(Builder)是创建型设计模式的最后一个&#xff0c;但是确实在平时开发过程中或者阅读源码过程中是十分常见的&#xff0c;难度在我来看是比较适中的&#xff0c;理解起来的也比较轻松&#xff0c;并且平时我们在编码过程中也…

【NeurIPS-2022】CodeFormer: 将人脸复原转化为码本预测以减少LQ-HQ映射的不确定性

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言论文动机方法实验 总结互动致谢参考往期回顾 前言 盲人脸恢复是一个高度不适定的…

JAVA-多线程join()等待一个线程

引言&#xff1a;更多线程的认识可以看一篇博客&#xff1a; JAVA-Thread类实现多线程-CSDN博客 一、join()的作用 我们知道线程是随机调度执行的&#xff0c;但是有时候我们需要另一个任务完成了&#xff0c;我们才能继续&#xff0c;这个时候我们就可以使用join去等待线程结束…

《AI大模型开发笔记》——企业RAG技术实战

RAG(Retrieval-Augmented Generation)介绍 Retrieval-Augmented Generation for Large Language Models: A Survey: https://arxiv.org/abs/2312.10997 github项目: https://github.com/Tongji-KGLLM/RAG-Survey RAGFlow项目 ragflow项目地址: https://github.com/inf…

蓝桥杯备考:特殊01背包问题——》集合subset

我们划分成两个集合&#xff0c;实际上我们只需要看一部分就行了&#xff0c;也就是从集合的所有元素里挑出恰好满足集合总和的一半儿&#xff0c;当然&#xff0c;如果我们的集合总和是奇数的话&#xff0c;我们是无论如何也挑不出刚好一半儿的&#xff0c;因为我们没有小数&a…

python字符级差异分析并生成 Word 报告 自然语言处理断句

import difflib from docx import Document from docx.shared import RGBColor from snownlp import SnowNLPdef analyze_char_differences(text_a, text_b):"""分析两个文本的字符级差异:param text_a: 第一个文本:param text_b: 第二个文本"""…

尝试在软考66天前开始成为软件设计师-数据库系统

三级模式-两级映射 层次型架构设计 ---便利,应变能力↗ 外模式 (用户与数据库系统的接口 视图概念模式 (数据库中全体数据的逻辑结构和特征内模式 (数据物理结构和存储方式 外模式/模式映像。 该映像存在于外部级和概念级之间&#xff0c;实现了外模式到概念模式…

Hadoop•常用命令

听说这是目录哦 操作命令&#x1f96f;退出清屏切换工作目录移动文件查看创建删除复制文件内容查看编辑解压缩其它命令技巧 系统命令&#x1f355;vim操作命令(命令模式下)光标移动复制粘贴(vi编辑器内部)删除、撤销 若vi&#xff0c;vim&#xff0c;ls找不到命令⚠️能量站&am…

linux之 内存管理(1)-armv8 内核启动页表建立过程

一、内核启动时&#xff0c;页表映射有哪些&#xff1f; Linux初始化过程&#xff0c;会依次建立如下页表映射&#xff1a; 1.恒等映射&#xff1a;页表基地址idmap_pg_dir; 2.粗粒度内核镜像映射&#xff1a;页表基地址init_pg_dir; 3.fixmap映射&#xff1a;页表基地址为…

IntelliJ IDEA 快捷键系列:重命名快捷键详解

目录 引言一、默认重命名快捷键1. Windows 系统‌2. Mac 系统‌ 二、操作步骤与技巧1. 精准选择重命名范围‌2. 智能过滤无关内容‌ 三、总结 引言 在代码重构中&#xff0c;‌重命名变量、类、方法‌ 是最常用的操作之一。正确使用快捷键可以极大提升开发效率。本文针对 ‌Ma…

Swagger-告别手写文档

文章目录 1. 引言2. Swagger是什么&#xff1f;3. SpringBoot2.7.3集成Swagger4. 常见注解 1. 引言 在RESTful API开发中&#xff0c;维护准确、易读的接口文档是团队协作的核心挑战&#xff0c;通常接口文档分为离线的和实时的。离线的接口文档工具有 YAPI等&#xff0c;其中…

深入解析 C++ Vector:全面掌握 STL 核心容器的原理与高效实践

一、Vector 的核心概念与特性 Vector 是 C 标准库中最常用的动态数组容器&#xff0c;其底层基于连续内存存储元素&#xff0c;兼具数组的高效访问与动态扩容的灵活性。以下是其核心特性&#xff1a; 1.1 核心特性对比 特性普通数组Vector 容器内存分配静态固定动态增长访问效…

element-plus中DatePicker 日期选择器组件的使用

1.选择某一天 代码&#xff1a; <el-date-pickerv-model"invoice_date"type"date"placeholder"请选择日期"style"width: 200px;"clearable /> 运行效果&#xff1a; 问题所在&#xff1a;这个数据的格式不是我们后端需要的那种&…

Python Bug修复案例分析:Python 中常见的 IndentationError 错误 bug 的修复

在 Python 编程的世界里&#xff0c;代码的可读性和规范性至关重要。Python 通过强制使用缩进来表示代码块的层次结构&#xff0c;这一独特的设计理念使得代码更加清晰易读。然而&#xff0c;正是这种对缩进的严格要求&#xff0c;导致开发者在编写代码时&#xff0c;稍有不慎就…