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

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;
http://www.xdnf.cn/news/12554.html

相关文章:

  • 【西门子杯工业嵌入式-3-如何使用KEY】
  • Ubuntu20.04基础配置安装——系统安装(一)
  • uniapp 对接腾讯云IM群公告功能
  • Spring Boot + Thymeleaf 防重复提交
  • wpf ListBox 去除item 单击样式
  • Python控制台输出彩色字体指南
  • 如何判断指针是否需要释放?
  • 2024 CKA题库+详尽解析| 15、备份还原Etcd
  • 6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
  • CSS3 的特性
  • 前端开发者常用网站
  • DeepSeek09-open-webui使用
  • 银行卡二三四要素实名接口如何用PHP实现调用?
  • npm安装electron下载太慢,导致报错
  • 华为云Flexus+DeepSeek征文 | 从零到一:用Flexus云服务打造低延迟联网搜索Agent
  • 【杂谈】-DeepSeek-V3:AI开发的成本效益突破与行业启示
  • ARM SMMUv3简介(一)
  • 常用存储器介绍
  • 10.Linux进程信号
  • 第四十六天打卡
  • 简单了解一下Hugging Face(抱抱脸)
  • 信号(瞬时)频率求解与仿真实践(1)
  • Unity版本使用情况统计(更新至2025年5月)
  • 计算机网络基础(一)
  • C语言速成15之告别变量碎片化:C 语言结构体如何让数据管理从混乱走向有序
  • LTE重建到新小区流程介绍
  • 宁乡地-气-碳-水相互作用综合观测数据集
  • 008-C++String
  • 深入浅出:计算机网络体系结构——信息世界的“交通规则”
  • 0.5S 级精度背后:DJSF1352-RN-6 如何让储能电站的每 1kWh 都「有迹可循」?