前端基础(三十七):属性结构数据进行关键字筛选

效果

在这里插入图片描述

核心源码

type MenuItem = {label: string;key: string | number;icon?: React.ReactNode;children?: MenuItem[];type?: 'group';
}function filterTreeData(tree: MenuItem[], keyword: string): MenuItem[] {return tree.filter((node: MenuItem) => {if (node.label.includes(keyword)) {return true;}if (Array.isArray(node.children)) {node.children = filterTreeData(node.children, keyword);return !!node.children?.length;}return false;});
}

源码

import React, {useState} from 'react';
import {BarChartOutlined, CompassOutlined, DatabaseOutlined, DeploymentUnitOutlined, DesktopOutlined, SettingOutlined,FundProjectionScreenOutlined, FundViewOutlined, HomeOutlined, MenuFoldOutlined, MenuUnfoldOutlined, MessageOutlined,TrophyOutlined, VerifiedOutlined,
} from '@ant-design/icons';
import {Flex, Button, Menu as AntdMenu} from 'antd';
import Search from "antd/es/input/Search";
import {SearchProps} from "antd/lib/input";type MenuItem = {label: string;key: string | number;icon?: React.ReactNode;children?: MenuItem[];type?: 'group';
}function getItem(label: React.ReactNode, key: React.Key, icon?: React.ReactNode, children?: MenuItem[], type?: 'group',): MenuItem {return {key, icon, children, label, type,} as MenuItem;
}function filterTreeData(tree: MenuItem[], keyword: string): MenuItem[] {return tree.filter((node: MenuItem) => {if (node.label.includes(keyword)) {return true;}if (Array.isArray(node.children)) {node.children = filterTreeData(node.children, keyword);return !!node.children?.length;}return false;});
}const Menu: React.FC = () => {const menuItems: MenuItem[] = [getItem('首页', '1', <HomeOutlined/>),getItem('平台管理', '2', <DesktopOutlined/>, [getItem('学生管理', '2-1'),getItem('教师管理', '2-2'),getItem('班级管理', '2-3'),getItem('任务管理', '2-4', null, [getItem('课程管理', '2-4-1'),getItem('发布任务', '2-4-2'),]),getItem('作业管理', '2-5'),getItem('答卷管理', '2-6', null, [getItem('批卷列表', '2-6-1'),getItem('批卷结果', '2-6-2'),]),]),getItem('平台资源', '3', <DatabaseOutlined/>),getItem('教学实训', '4', <MessageOutlined/>),getItem('培训认证', '5', <VerifiedOutlined/>),getItem('技能竞赛', '6', <TrophyOutlined/>),getItem('科研实验', '7', <DeploymentUnitOutlined/>),getItem('数据平台', '8', <BarChartOutlined/>),getItem('算法平台', '9', <FundProjectionScreenOutlined/>),getItem('系統管理', '10', <CompassOutlined/>),getItem('系统监控', '11', <FundViewOutlined/>),getItem('系統工具', '12', <SettingOutlined/>),];const [items, setItems] = useState<MenuItem[]>(menuItems);const [collapsed, setCollapsed] = useState(false);const toggleCollapsed = () => {setCollapsed(!collapsed);};const onSearch: SearchProps['onSearch'] = (value, _e, _info) => {setItems(filterTreeData(menuItems, value));};return (<><div className="menu-tool"><Flex gap={10}>{collapsed ? '' : (<Search placeholder="在此输入关键词..." onSearch={onSearch}/>)}<Button block={collapsed} type="primary" onClick={toggleCollapsed} icon={collapsed ? <MenuUnfoldOutlined/> : <MenuFoldOutlined/>}/></Flex></div><AntdMenu defaultSelectedKeys={['1']} mode="inline" inlineCollapsed={collapsed} items={items}/></>);
};export default Menu;

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

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

相关文章

修改一个VC++访问数据库源码

下载一个VC6访问数据库的源码;修改; 打开工程先出现下图错误; 根据资料,出现此错误,解决方法: 1.如果用户不需要在 WizardBar,请关闭该的 WizardBar 并重新启动 Visual C++6.0。 如果但是,您想访问 WizardBar 功能,请关闭受影响的工作区之前关闭所有窗口。 2.重新生…

我的512天创作者纪念日总结:高效、高现

文章目录 512天创作者纪念日&#xff1a;2023年的12月31日CSDN的512天消息提醒第一篇文章&#xff0c;最后一篇文章总计847篇文章&#xff0c;每月发文分布512天&#xff0c;各专栏文章统计512天&#xff0c;互动总成绩 512天创作者纪念日&#xff1a;2023年的12月31日 2023年…

node相关的args属性与<param>子标签的区别

launch文件内&#xff1a;node标签内的<param>标签示例&#xff1a; 可以看到launch文件内的<param>标签在命令行内会转化为--ros-args -p 这样格式的命令&#xff0c;说明<param>标签指定的是ros2内的参数。不能用于传递非ros2的传入参数 如果要传入非ros2…

CentOS:docker同一容器间通信

docker同一容器中不同服务以别名访问 1、创建bridge网络 docker network create testnet 2、查看Docker网络 docker network ls 3、运行容器连接到testnet网络 使用方法&#xff1a;docker run -it --name <容器名> —network --network-alias <网络别名> <…

VMware虚拟机之文件夹共享jdk和tomcat安装防火墙设置

目录 一. 配置文件夹共享功能 1.1 为什么需要配置文件夹共享功能 1.2 配置文件共享功能 1.3 普通共享和高级共享的区别 1.3.1 普通共享 1.3.2 高级共享 1.3.3 总结 二. jdk的配置 2.1 安装jdk 2.2 配置jdk的环境配置jdk 2.3 配置成功 三. TomCat的配置 四. 防火墙设置 4.1…

2024最全面且有知识深度的web3开发工具、web3学习项目资源平台

在Web3技术迅速发展的时代&#xff0c;寻找一个综合且深入的Web3开发工具和学习项目资源平台变得至关重要。今天&#xff0c;我将向大家介绍一个非常有价值的网站&#xff0c;它就是https://web3x.world 。 Web3X是一个全面而深入的Web3开发者社区&#xff0c;为开发者们提供了…

RocketMQ5.1.4(Windows版本)

下载官网&#xff1a; Windows&#xff1a; 下载 | RocketMQ (apache.org) Linux&#xff1a; Index of /dist/rocketmq/5.1.4 (apache.org) Windows下载如图所示&#xff1a; &#xfeff; Linux下载如图所示&#xff1a; &#xfeff; Windows环境下RocketMQ配置网…

LeetCode每日一题.04(不同路径)

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; 示例 1…

一个有趣的MOSFET电路-触摸调光电路

来源 刷B站视频&#xff0c;看到一个很新奇的“触摸调光电路”&#xff0c;电路图如下&#xff1a; 视频在这里&#xff0c;只使用了3个元件。 刚好最近在学模拟电路的 MOSFET&#xff0c;我之前的理解是 MOSFET 的控制电压应该加在 Gate 和 Source 之间&#xff0c;也就是 栅…

Cisco模拟器-交换机端口的隔离

设计要求将某台交换机的端口划分在不同的VLAN。以实现连接在相同VLAN端口上的计算机可以通信&#xff0c;而连接在不同VLAN端口上的计算机无法通信的目的。 通过设计&#xff0c;一方面可以加强计算机网络的安全&#xff0c;另一方面通过隔绝不同VLAN间的广播包也可以提高网络…

PyTorch常用工具(2)预训练模型

文章目录 前言2 预训练模型 前言 在训练神经网络的过程中需要用到很多的工具&#xff0c;最重要的是数据处理、可视化和GPU加速。本章主要介绍PyTorch在这些方面常用的工具模块&#xff0c;合理使用这些工具可以极大地提高编程效率。 由于内容较多&#xff0c;本文分成了五篇…

YOLOv8改进 | 检测头篇 | ASFF改进YOLOv8检测头(全网首发)

一、本文介绍 本文给大家带来的改进机制是利用ASFF改进YOLOv8的检测头形成新的检测头Detect_ASFF&#xff0c;其主要创新是引入了一种自适应的空间特征融合方式&#xff0c;有效地过滤掉冲突信息&#xff0c;从而增强了尺度不变性。经过我的实验验证&#xff0c;修改后的检测头…