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

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架

1、菜单文件treeTop.js

// 顶部菜单
import { AppstoreOutlined, SettingOutlined } from '@ant-design/icons';
// 定义菜单项数据
const treeTop = [{label: 'Docker管理',key: '1',icon: <AppstoreOutlined />,url:"/docker/index"},{label: '权限管理',key: '2',icon: <SettingOutlined />,children: [{ label: '管理员', key: '2-1',url:""},{ label: '退出登录', key: '2-2',url:"/login"},],}
];export default treeTop;

菜单文件

'use client';
import React, { useState } from 'react';
import { Menu,message } from 'antd';
import treeTop from './treeTop.js';const Menus = () => {// 为菜单项添加 onClick 回调(动态绑定)treeTop.map((item,index) => {if (item.children) {item.children.map((child,index2) => {if (child.children) {// 三级菜单,是按钮,按钮是控制权限,无需加点击事件//child.children.map((child2,index3) => {//  treeTop[index].children[index2].onClick = () => onClick(child2)//})}else{// 二级菜单treeTop[index].children[index2].onClick = () => onClick(child)}})}else{// 只有一级菜单treeTop[index].onClick = () => onClick(item)}})const [messageApi,contextHolder] = message.useMessage();const [current, setCurrent] = useState('1');// 菜单点击事件处理函数const onClick = e => {console.log('click ', e);setCurrent(e.key);if (e.label === '退出登录') {window.location.href = '/login'; // 重定向到登录页面 }if (e.label === '管理员') {messageApi.open({type: 'success',content: '操作成功',});messageApi.open({type: 'error',content: '操作失败',});}};// 页面return (<>{/* 提示 */}{contextHolder}{/* 顶部菜单onClick={onClick} */}<Menu selectedKeys={[current]} mode="horizontal" items={treeTop} /></>);
};
export default Menus;

在这里插入图片描述
在这里插入图片描述
升级存在url才加点击事件

'use client';
import React, { useState } from 'react';
import { Menu,message } from 'antd';
import treeTop from './treeTop.js';const Menus = () => {// 为菜单项添加 onClick 回调(动态绑定)treeTop.map((item,index) => {if (item.children) {item.children.map((child,index2) => {// 没有三级菜单,是按钮,按钮是控制权限,无需加点击事件if (child.children) {// 三级菜单,是按钮,按钮是控制权限,无需加点击事件// child.children.map((child2,index3) => {//   treeTop[index].children[index2].onClick = () => onClick(child2)// })}else{// 二级菜单// treeTop[index].children[index2].onClick = () => onClick(child)}// 二级菜单,url不为空,加点击事件//if (child.url) {// 二级菜单,所以直接加点击事件//  treeTop[index].children[index2].onClick = () => onClick(child)//}// 二级菜单,加点击事件treeTop[index].children[index2].onClick = () => onClick(child)})}// 一级菜单,url不为空,加点击事件,如果有children就是按钮权限if (item.url) {treeTop[index].onClick = () => onClick(item)}})const [messageApi,contextHolder] = message.useMessage();const [current, setCurrent] = useState('1');// 菜单点击事件处理函数const onClick = e => {console.log('click ', e);setCurrent(e.key);if (e.label === '退出登录') {window.location.href = '/login'; // 重定向到登录页面 }if (e.label === '管理员') {messageApi.open({type: 'success',content: '操作成功',});messageApi.open({type: 'error',content: '操作失败',});}};// 页面return (<>{/* 提示 */}{contextHolder}{/* 顶部菜单onClick={onClick} */}<Menu selectedKeys={[current]} mode="horizontal" items={treeTop} /></>);
};
export default Menus;

相关文章:

  • 【Docker 01】Docker 简介
  • 数学:花括号在数学中的应用详解
  • Strong Baseline: Multi-UAV Tracking via YOLOv12 with BoT-SORT-ReID 2025最新无人机跟踪
  • Scrapy爬虫教程(新手)
  • 论文阅读:Matting by Generation
  • jenkins gerrit-trigger插件配置
  • [yolov11改进系列]基于yolov11融合改进检测头AFPN4的python源码+训练源码
  • |从零开始的Pyside2界面编程| 用Pyside2打造一个AI助手界面
  • 第10篇《数据库中间件集成监控与全链路观测系统设计》
  • CAN转PROFINET网关设备基本功能介绍
  • uniapp 对接腾讯云IM群组成员管理(增删改查)
  • Ajax Systems公司的核心产品有哪些?
  • 【python深度学习】Day 47 注意力热图可视化
  • STM32的系统滴答定时器简述
  • RTOS学习之重难点
  • 开疆智能Ethernet/IP转Modbus网关连接施耐德ATV320变频器配置案例
  • 怎么让自己ip显示外省?一文说清操作
  • ubuntu中使用docker
  • [总结篇]个人网站
  • 深入剖析Nginx:从入门到高并发架构实战
  • app产品网站建设/二级域名网站查询入口
  • 做外卖那些网站好/seo推广有哪些
  • 网站建设用什么框架好/常州网站推广公司
  • 百度网站前三名权重一般在多少/自己建网站需要钱吗
  • 做网站前端用什么/seo排名快速上升
  • 酒店品牌网站建设推广/seo按照搜索引擎的