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

react+antdesign实现后台管理系统面包屑

在这里插入图片描述
andDesign面包屑组件,实现这个功能主要是当我点击对应目录下的子菜单使用递归获取当前叶子节点的最高父节点拿到整个对象塞到集合中去

创建 Breadcrumb组件

import { Breadcrumb } from 'antd';
import { routes } from '@/router/routes';
import { useLocation } from'react-router-dom';
import { getBreadcrumbList } from '@/utils';
const BreadcrumbNav = () => {const location = useLocation();const items = getBreadcrumbList(routes, location.pathname);const breadcrumbItems = items.map(item => {const childrenMenu = item.children?.map(child => ({key: child.path,label: <a href={`#${child.path}`}>{child.meta.title}</a>})) || [];return {title: (<span> {item?.meta?.title}</span>),menu: childrenMenu.length > 0 ? { items: childrenMenu } : undefined};});return (<Breadcrumbitems={[{title: <a href="#/">首页</a>},...breadcrumbItems]}/>)
};export default BreadcrumbNav;

utils文件

export const searchRoute = (path: string, routes: RouteObject[] = []): RouteObject => {let result: RouteObject = {};for (const item of routes) {if (item.path === path) return item;if (item.children) {const res = searchRoute(path, item.children);if (Object.keys(res).length) result = res;}}return result;
};export const getBreadcrumbList = (routes: RouteObject[] = [], currentPath: string) => {if(!currentPath || currentPath === '/') return [];const currentParent = findBreadcrumb(routes, currentPath)const current = searchRoute(currentPath, routes)return [currentParent,current]
}
export const findBreadcrumb = (routes: RouteObject[] = [], targetPath: string): any => {// 用于存储找到的最外层父节点let outermostParent = null;// 递归遍历路由配置的函数function traverse(nodes, currentParent?: any) {for (const node of nodes) {// 如果当前节点有子节点,继续递归遍历if (node.children && node.children.length > 0) {// 检查当前节点的子节点中是否包含目标路径const hasTarget = node.children.some(child => child.path === targetPath);// 如果找到目标路径,记录当前节点作为父节点if (hasTarget) {// 最外层父节点是首次找到的包含目标路径的祖先节点if (!outermostParent) {outermostParent = node;}} else {// 否则继续深入查找,当前节点作为临时父节点traverse(node.children, node);}}}}// 从根节点开始遍历traverse(routes, null);return outermostParent;
};
http://www.dtcms.com/a/391438.html

相关文章:

  • Day02【哔哩哔哩2023校园招聘后端开发方向笔试卷B】螺旋输出矩阵
  • 硬件开发_基于STM32单片机的家养绿植生长健康管理系统
  • 安装Node.js与NPM包管理器
  • 【数据结构】深入浅出图论:拓扑排序算法全面解析与应用实践
  • 全矩阵布局+硬核技术,中资机器人管家重塑智能服务新格局
  • Linux进程间通信(IPC)完全指南:从管道到共享内存的系统性学习
  • vllm安装使用及问题
  • redis配置与优化(2)
  • 苹果开发者账号( Apple Developer)登录出现:你的 Apple ID 暂时不符合使用此应用程序的条件(您的apple账户不符合资格)
  • Git常用命令和分支管理
  • AI报告撰写实战指南:从提示词工程到全流程优化的底层逻辑与实践突破
  • 主流数据库压测工具全解析(从工具选型到实战压测步骤)
  • Vue的理解与应用
  • TDMQ CKafka 版客户端实战指南系列之一:生产最佳实践
  • 苹果群控系统的资源调度
  • Qt如何实现自定义标题栏
  • Qt QPlugin界面插件式开发Q_DECLARE_INTERFACE、Q_PLUGIN_METADATA和Q_INTERFACES
  • 梯度增强算法(Gradient Boosting)学习笔记
  • 确保邵氏硬度计测量精度问题要考虑事宜
  • `scroll-margin-top`控制当页面滚动到某个元素滚时,它在视口预留的位置,上方留白
  • 内存管理-伙伴系统合并块计算,__find_buddy_pfn,谁是我的伙伴???
  • 【LVS入门宝典】LVS核心原理与实战:Director(负载均衡器)配置指南
  • 算法常考题:描述假设检验的过程
  • IEEE会议征集分论坛|2025年算法、软件与网络安全国际学术会议(ASNS2025)
  • 洞见未来:计算机视觉的发展、机遇与挑战
  • MongoDB集合学习笔记
  • C++ 中 std::list使用详解和实战示例
  • IO流的简单介绍
  • 【AI论文】SAIL-VL2技术报告
  • 基于 SSM(Spring+SpingMVC+Mybatis)+MySQL 实现(Web)软件测试用例在线评判系统