react | react-router-dom v6 结合 antd 面包屑 |嵌套路由

news2025/5/24 14:29:56

大致需求图示如上:

需求:

1. 点击page2默认进入`/page2/中国`

2. 在中国界面选择省份,进入浙江省

3. 在浙江省中选择市,进入杭州市

4. 选择大学,进入浙江大学

5. 点击面包屑中某个tab,进入对应tab界面,组件/路由切换

6. 路由携带参数,如面包屑中的数据

实现过程:

在page2组件内(仅供参考):

      <div className={styles.title}>
        <Breadcrumb separator="->" items={breadcrumbItems} />
      </div>
      <Routes>
        <Route path="chinaMap" element={<ChinaMap />} />
        <Route path="/" element={<Navigate to="/gradingRanking/chinaMap" />} />
        <Route path="chinaMap/:provincial" element={<ProvincialMap />} />
        <Route path="chinaMap/:provincial/:city" element={<City />} />
        <Route
          path="chinaMap/:provincial/:city/:school"
          element={<SchoolDetails />}
        />
      </Routes>

在国家/省份/城市等组件中传递参数,切换路由组件,使用params传参

主要用到 useParams useNavigate (注意:useHistory v6版本不可用)

通过以下方法获取参数:

const params = useParams();
params.xxx

通过以下方式传递参数/切换路由组件:

const navigate = useNavigate();
const params = useParams();
navigate(`/xxx/xxx/${params.provincial}/${city}`)

以上,完成了路由组件的切换,参数的传递。


接下来通过在page2组件内通过设置 antd的组件<Breadcrumd /> 的 items属性,实现点击面包屑切换路由组件的功能。在这里,我没有按照antd官网的代码来实现,因为不太适合这个需求,也或许是我没摸明白怎么用,下面是我参考官网按照自己的方法来实现的代码(这里的gradingRanking等同于上文的page2,chinaMap等同于中国,这里的代码仅供参考,重点是思路)。

  const params = useParams();

  let arr = Object.values(params)[0]
    .split("/")
    .filter((i) => i != "chinaMap" && i);
  const extraBreadcrumbItems = arr.map((item, index) => {
    let url = `/gradingRanking/chinaMap/${arr.slice(0, index + 1).join("/")}`;
    return {
      key: url,
      title: <Link to={url}>{item}</Link>,
    };
  });
  const breadcrumbItems = [
    {
      title: <Link to="/gradingRanking">中国</Link>,
      key: "中国",
    },
  ].concat(extraBreadcrumbItems);

在page2这个组件中不通过useEffect直接获取params是只能获取到一个key-value(当前路由)的,因此直接通过split切割为数组,并在此时通过filter筛选掉chinaMap(也就是page2这个组件的路由)。

遍历这个数组,使用slice切割数组到对应位置,并通过 / 连接。

这样就得到了 url(/page2/中国 或者/page2/中国/浙江省) 和 item(中国/浙江省 之类breadcrumb名称)。

将他们concat进items中即可。

可能还需要再细化一下,但是大致思路就是这样:
  1. 首先在中间组件page2中放进去breadcrumb和routers;
  2. 接着在routers中的组件里通过useParams useNavigate完成传参和跳转;
  3. 最后在page2组件中处理params得到url和name并按固定格式放进items。
需要注意的是:

routers中组件的注册因为用的是params传参,因此书写方式是/xxx/:xxx/:xxx(冒号后面是这个参数的id)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis 多机服务的简单认识】

目录 主从同步 哨兵模式 集群服务 随着业务的不断发展&#xff0c;单机 Redis 的性能已经不能满⾜我们的需求了&#xff0c;此时我们需要将单机 Redis 扩展为多机服务&#xff0c;Redis 多机服务主要包含以下 3 个内容&#xff1a; Redis 主从同步Redis 哨兵模式Redis 集群…

【记录】Truenas scale|Truenas 的 SSH 服务连不上 VScode,终端能连上

一般 Truenas连不上 就只有两种情况&#xff1a; 第一种&#xff1a;用户没对应用户目录。需要去用户管理里面对每个用户设置目录。 第二种情况&#xff0c;服务有个选项没勾选。这时会发现能输入密码但是一点反应都没有&#xff0c;打开details会看到报错channel 3: open fai…

A股风格因子看板 (2023.09 第03期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴露等。 今日为该因子跟踪第03期&#xff0c;指数组合数据截止日2023-08-31&#xff0c;要点如下 近1年A股风格因子检验统…

qml怎么显示网页

QML显示网页需要使用Qt WebEngine模块,它提供了一个WebEngineView组件,可以用来在QML中显示和交互网页。 首先,确保你已经安装了Qt WebEngine模块。如果你使用的是Qt的在线安装程序,你可以通过Qt Maintenance Tool来添加这个模块。 以下是如何在QML中使用WebEngineView来…

三维重建_表面重建_基于符号距离场的表面重建

目录 1. 三维物体的表面表达方式 1.1 边界表示法 (Boundary Representation) 1.2 空间划分法 (Spatial-Partitioning Representations) 1.3 构造体素法 (Boundary Constructive Solid Geometry) 2. 三维模型的表述方式 3. 基于符号距离场的表面重建方法 3.1 符号距离…

再不跳槽,就真晚了......

从时间节点上来看&#xff0c;9月、10月是每年跳槽的黄金季&#xff01; 以 BAT 为代表的互联网大厂&#xff0c;无论是薪资待遇、还是平台和福利&#xff0c;都一直是求职者眼中的香饽饽&#xff0c;“大厂经历” 在国内就业环境中无异于一块金子招牌。在这金三银四的时间里&…

吃瓜教程第一二章学习记录

当大多数人听到 "机器学习 "时&#xff0c;他们会联想到机器人&#xff1a;一个可靠的管家或一个致命的终结者&#xff0c;这取决于你问谁。但是&#xff0c;机器学习并不只是未来主义的幻想&#xff0c;它已经存在了。事实上&#xff0c;在一些特殊的应用中&#xf…

Redis:分布式锁误删原因分析

一、线程阻塞 例如&#xff0c;线程一获取分布式锁&#xff0c;但是线程一阻塞时间过长&#xff0c;导致锁超时释放。此时线程二获取分布式锁。当线程一阻塞结束后&#xff0c;释放分布式锁&#xff0c;但是释放的却是线程二的锁。此时线程二就不安全了&#xff0c;线程三也可…

TypeScript——泛型理论与实践

1. 简介 软件工程的一个重要部分就是构建组件&#xff0c;组件不仅需要有定义良好和一致的 API&#xff0c;还需要是可复用的。好的组件不仅能够兼容现有的数据类型&#xff0c;也能适用于未来可能出现的数据类型&#xff0c;这在构建大型软件系统时会有很大的灵活度以及很高的…

Android嵌套事务

这时候旋转设备还是会重置秒表。旋转设备时Android会重新创建活动。如果你的活动包含一个 < fragment >元素&#xff0c;每次重新创建活动时&#xff0c;它会重新插入片段的一个新版本。老片段被丢掉&#xff0c;所有实例变量会设置其初始值。在这个特定的例子中&#xf…

基于微信小程序的“共享书角”图书借还管理系统(springboot+vue)

为设计一个安全便捷&#xff0c;并且使借阅者更好获取本图书借还信息&#xff0c;本文主要有安全、简洁为理念&#xff0c;实现借阅者快捷寻找图书借还信息&#xff0c;从而解决图书借还信息复杂难辨的问题。该系统以springboot架构技术为基础&#xff0c;采用Java语言和MySQL数…

家政服务预约小程序,推拿spa上门预约系统

家政服务预约小程序&#xff0c;用户直接发布需求下单&#xff0c;师傅入驻抢单派单&#xff0c;多商家入驻&#xff0c;上门预约服务流程清晰&#xff0c;适合家政公司或需要预约场景的团队公司使用&#xff0c;支持多种行业上门预约服务场景&#xff1a;家政保洁维修上门服务…

CISP认证介绍(CISECISO)

0x00 前言 CTF 加解密合集CTF Web合集网络安全知识库溯源相关 文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取 0x01 什么是CISP CISP &#xff08;Certified Information Security Professional&#xff09; 注册信息安全专业人员资格认证&#xff0c;由中国信息…

几个好用的数据标注软件labelme、CVAT及LabelImage

我们使用yolov3、yolov4、yolov5、yolov8等训练自己的权重时&#xff0c;需要有大量标注好的数据集&#xff0c;这里有几个好用的数据标注软件labelme、CVAT及LabelImage 一、labelme labelme&#xff1a;https://github.com/wkentaro/labelme 这个软件用的比较多&#xff0c…

介绍Spring MVC框架,以及如何使用它构建Web应用程序。

文章目录 什么是 Spring MVC&#xff1f;Spring MVC 的工作原理如何使用 Spring MVC 构建 Web 应用程序配置 Spring MVC创建控制器创建视图配置 Spring MVC 配置文件运行应用程序 总结 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢…

baichuan-53B VS ChatGLM-6B对比

由于百川智能的内测模型是baichuan-53B&#xff0c;尽管模型大小不一致&#xff0c;为了方便&#xff0c;我们仍然选择百川智能baichuan-53B与ChatGLM-6B内测结果进行对比&#xff0c;其中ChatGLM-6B的结果来自https://github.com/THUDM/ChatGLM-6B&#xff0c;假设ChatGLM-6B的…

Spring (2) AOP

目录 1 代理(Proxy)模式 1.1 静态代理 1.2 动态代理 1.2.1 基于接口的动态代理 1.2.2 基于子类的动态代理 2 AOP 2.1 注解开发 1 代理(Proxy)模式 一种设计模式,它的作用是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接调用,而是通过代理类间接调用 1.1 静…

可降阶的高阶方程与高阶线性微分方程

目录 可降阶的高阶方程 高阶线性微分方程 齐次方程 非齐次方程 常系数齐次线性微分方程 常系数非齐次线性微分方程 可降阶的高阶方程 我们需要先理解什么是可降解的高阶微分方程。可降解的高阶微分方程是指可以转化为低阶微分方程的方程。 例如&#xff0c;以下是一个二阶…

docker 获取Nvidia 镜像 | cuda |cudnn

本文分享如何使用docker获取Nvidia 镜像&#xff0c;包括cuda10、cuda11等不同版本&#xff0c;cudnn7、cudnn8等&#xff0c;快速搭建深度学习环境。 1、来到docker hub官网&#xff0c;查看有那些Nvidia 镜像 https://hub.docker.com/r/nvidia/cuda/tags?page2&name11.…

高德地图实现-逆地理编码-输入提示-地图标点-实现车库管理

效果图&#xff1a; 我们将学习如何创建一个前端地图应用程序&#xff0c;该应用程序集成了高德地图API&#xff0c;允许用户进行地点搜索、选择和标记&#xff0c;以及执行逆地理编码以获取地址信息。我们将使用Vue.js框架来构建应用程序&#xff0c;并结合高德地图的功能来实…