当前位置: 首页 > 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;
http://www.lqws.cn/news/197029.html

相关文章:

  • 【android bluetooth 协议分析 15】【SPP详解 1】【SPP 介绍】
  • 【Java学习笔记】SringBuffer类(重点)
  • Redis专题-基础篇
  • TripGenie:畅游济南旅行规划助手:个人工作纪实(二十二)
  • C++课设:简易科学计算器(支持+-*/、sin、cos、tan、log等科学函数)
  • DDPM优化目标公式推导
  • 【生活】程序员防猝si指南
  • Linux 系统中使用 VBScript(Visual Basic Script)wine安装vbs
  • 移除元素-JavaScript【算法学习day.04】
  • 对比学习
  • Python实例题:Python计算线性代数
  • 使用Conda管理服务器多版本Python环境的完整指南
  • Git 使用完全指南:从入门到协作开发
  • 光学字符识别(OCR)理论概述与实践教程
  • cmake编译LASzip和LAStools
  • pycharm 中文字体报错
  • 主流大语言模型安全性测试(三):阿拉伯语越狱提示词下的表现与分析
  • 几种简单的排序算法(C语言)
  • 【Fiddler工具判断前后端Bug】
  • mariadb5.5.56在centos7.6环境安装
  • 无法与IP建立连接,未能下载VSCode服务器
  • 基于Java+VUE+MariaDB实现(Web)仿小米商城
  • ADB识别手机系统弹授权框-如何处理多重弹框叠加和重叠问题
  • 电子电气架构 ---智能汽车电子电气架构
  • 使用 Python + SQLAlchemy 创建知识库数据库(SQLite)—— 构建本地知识库系统的基础《一》
  • Docker构建Vite项目内存溢出:从Heap Limit报错到完美解决的剖析
  • jvm 垃圾收集算法 详解
  • 数据库(sqlite)基本操作
  • 【JVM】Java虚拟机(二)——垃圾回收
  • Docker基础(一)