五、【React-Router6】路由表 useRoutes() + Outlet

news/2024/11/30 5:55:09/

文章目录

  • 1、useRoutes() 介绍
  • 2、简单 CODING
    • 2.1、项目结构
    • 2.2、routes.js
    • 2.3、App.js
    • 2.4、Result
  • 3、嵌套 Outlet CODING
    • 3.1、项目结构
    • 3.2、routes.js
    • 3.3、Home.js
    • 3.4、App.js
    • 3.5、Result

1、useRoutes() 介绍

  • 原来写的路由管理如下
<Routes><Route path='/about' element={<About />} /><Route path='/home' element={<Home />} /><Route path='/' element={<Navigate to='/about' />} />
</Routes>
  • 使用路由表 useRoutes()
    • 正常会单独建一个 routes 文件夹,文件夹下单独维护一个路由表js文件
import { useRoutes } from 'react-router-dom'// 定义路由表
const elements = useRoutes([{path: '/about',element: <About />
}, {path: '/home',element: <Home />
}, {path: '/',element: <Navigate to='/about' />
}])// 在配置路由管理的地方直接插入即可
{elements}

2、简单 CODING

项目修改自 上一节 的 Demo

2.1、项目结构

在这里插入图片描述

2.2、routes.js

import { Navigate } from 'react-router-dom'
import About from '../components/About'
import Home from '../components/Home'const routes = [{path: '/about',element: <About />
}, {path: '/home',element: <Home />
}, {path: '/',element: <Navigate to='/about' />
}]export default routes

2.3、App.js

import React from 'react'
import { NavLink, useRoutes } from 'react-router-dom'
import routes from './routes'export default function App() {const activeClassName = ({ isActive }) => isActive ? 'list-group-item peiqi' : 'list-group-item'const elements = useRoutes(routes)return (<div><div className="row"><div className="col-xs-offset-2 col-xs-8"><div className="page-header"><h1>React Router Demo</h1></div></div></div><div className="row"><div className="col-xs-2 col-xs-offset-2"><div className="list-group" style={{ whiteSpace: 'pre-wrap' }}><NavLink className={activeClassName} to="/about">About</NavLink><NavLink className={activeClassName} to="/home">Home</NavLink></div></div><div className="col-xs-6"><div className="panel"><div className="panel-body" style={{ whiteSpace: 'pre-wrap' }}>{/* 注册路由 */}{elements}</div></div></div></div></div>)
}

2.4、Result

在这里插入图片描述

3、嵌套 Outlet CODING

项目后续增加的内容修改自 七、【React-Router5】嵌套路由 的 Demo

3.1、项目结构

  • 增加了子组件

在这里插入图片描述

3.2、routes.js

  • 有子路由就加 children 属性,可以无限套娃
import { Navigate } from 'react-router-dom'
import About from '../components/About'
import Home from '../components/Home'
import Message from '../components/Home/Message'
import News from '../components/Home/News'const routes = [{path: '/about',element: <About />
}, {path: '/home',element: <Home />,children: [{path: 'news',element: <News />}, {path: 'message',element: <Message />}]
}, {path: '/',element: <Navigate to='/about' />
}]export default routes

3.3、Home.js

  • 这里需要注意的变化
    • 子路由 NavLinkto 可以像原来一样写全 path:to="/home/news"
    • 也可以直接 ./ + 子路由名:to="./news"
    • 最简单直接写子路由名:to="news"
    • 子路由组件呈现的位置直接使用 6 提供的 <Outlet> 标签声明即可,会自动分配子路由管理
import React from 'react'
import { NavLink, Outlet } from 'react-router-dom'export default function Home() {return (<><h3>我是Home的内容</h3><div><ul class="nav nav-tabs"><li><NavLink className='list-group-item' to="/home/news">News</NavLink></li><li>{/* to 可以直接 ./ + 子路由名 */}<NavLink className='list-group-item' to="./message">Message</NavLink></li><li>{/* to 甚至可以直接写子路由名字 */}<NavLink className='list-group-item' to="other">Other</NavLink></li></ul>{/* 指定路由组件呈现的位置 */}<Outlet /></div></>)
}

3.4、App.js

  • 这里需要注意的变化
    • <NavLink end> end 属性可以父路由失去被选中状态,默认 false
<NavLink className={activeClassName} end to="/home">Home</NavLink>

3.5、Result

在这里插入图片描述


http://www.ppmy.cn/news/864.html

相关文章

设备发现:通向全面网络可见性的途径

想实现企业网络安全防护&#xff0c;它首先需要完全了解其网络中发生的所有事件。有了这种可见性&#xff0c;企业网络安全管理员可以分析用户在网络环境中进行了哪些危险的操作&#xff0c;并采取必要的应对措施来主动保护企业网络免受攻击。 日志取证 但是&#xff0c;如果攻…

C#教务管理大数据平台系统源码

校务管理系统是专门针对幼儿园、培训学校的业务应用而设计研发的一款行业应用软件。校管家校务管理系统融入先进的协同管理理念&#xff0c;运用领先的信息化、网络化处理技术&#xff0c;结合丰富的教育培训行业经验&#xff0c;切实有效的解决幼儿园、培训学校日常工作中的关…

基于x86架构的CentOS7虚拟机通过qemu安装ARM架构OpenEuler虚拟机

【原文链接】基于x86架构的CentOS7虚拟机通过qemu安装ARM架构OpenEuler虚拟机 &#xff08;1&#xff09;首先需要有一台CentOS虚拟机&#xff0c;如没有可参考 VMWare安装CentOS7操作系统的虚拟机 安装一台CentOS虚拟机 &#xff08;2&#xff09;安装基础命令 yum install…

嵌入式复习题

最后一次考试了 小海螺预祝大家都能过&#xff01; 简答题&#xff08;7题考4题&#xff09; 嵌入式系统的开发流程 系统需求分析体系结构设计硬件/软件协同设计系统集成完成测试并形成产品 中断处理的6个步骤 禁止其他中断保存上下文中断处理程序中断服务程序恢复上下文允许…

单视频播放量超20万的公开课配套教材,猫书来了~

吹爆、强推、比刷剧还爽、一生推、传疯了&#xff01; 很难想象&#xff0c;网友们会用这些词来形容一个纯分享深度强化学习基础知识的视频课。 在 B 站上搜索 “深度强化学习”&#xff0c;在排名 TOP 10 的相关课程中&#xff0c;有 4 个是王树森老师的 Reinforcement Learni…

计算机视觉之目标检测训练数据集(皮卡丘)《2》

在做目标检测&#xff0c;训练数据集的时候&#xff0c;可以先看前段时间的一篇基础文章&#xff1a;计算机视觉之目标检测(object detection)《1》https://blog.csdn.net/weixin_41896770/article/details/128062645先熟悉一些基本知识&#xff0c;如&#xff1a;锚框&#xf…

计算机网络笔记1 概述

计算机网络笔记1 概述笔记前言&#x1f497;一、计算机网络概述&#x1f60d;二、计算机网络的性能指标&#x1f4a5;1、速率2、带宽3、吞吐量4、时延5、时延带宽积6、往返时间(Round-Trip-Time)7、利用率8、丢包率三、计算机网络的体系结构&#x1f525;四、计算机网络中的专业…

fat文件系统基础知识

文件分配表&#xff08;英语&#xff1a;File Allocation Table&#xff0c;首字母缩略字&#xff1a;FAT&#xff09;&#xff0c;是一种由微软发明并拥有部分专利的文件系统&#xff0c;供MS-DOS使用&#xff0c;也是所有非NT核心的Windows系统使用的文件系统。 FAT文件系统考…