React之动态渲染菜单(无状态机)

news2024/11/25 2:42:11

首先如果需要动态渲染菜单,并且根据不同用户获取不同的菜单,需要下面步骤:

我们动态渲染菜单需要使用递归的方式

1️⃣:首先用户的菜单都是从后端获取的,所以需要先发送请求,拿到菜单,然后将数据渲染到页面

代码:

newAxios.interceptors.request.use((req)=>{
    req.headers["Authori-zation"] = getToken(TOKEN_KEY)
    return req
})

❗:请求时,如果需要在请求头发送token,则按上面的格式。

首先根据用户获取菜单

然后将获取的菜单数据传给transformMenu函数

// 根据token获取用户的权限菜单
    const getMenus = async () => {
        const { data: data } = await $api.login.getMenus()
        console.log(data);
        let ary = transformMenu(data)
        setMenuitems(ary)
    }

2️⃣:   将后台数据转换成antdMenu所识别的数据

一般后端发送的数据,可能前端的UI库并不能识别,这时我们就需要将后端的数据进行一个转化。

封装一个transformMenu函数,这个函数将数据进行转换

const transformMenu = (list) => {
        return list.map(item=>{
            // 创建新的项对象
            let newMenu
            if(item.icon){
                newMenu = { label: item.name, key: item.component, icon: React.createElement(icons[item.icon]) }
            }else {
                newMenu = { label: item.name, key: item.component }
            }

            if (item.childList && item.childList.length > 0) {
                newMenu.children = transformMenu(item.childList)
            }
            return newMenu
        })
    }
    const go = () => {

    }

!!!注意:有的一级菜单有二级菜单,二级菜单可能没有三级菜单,有的或与有三级菜单,这时我们就需要做一个判断,  if (item.childList && item.childList.length > 0)  这里还需要对自己childList进行一个判断,如果不做这个判断,可能有的子级菜单为空,渲染时就会是空的,所以还要用子级的长度进行一个判断

- 我们创建一个对象,然后在这个对象里面自定义UI库所需要的属性。

- 数据转换完之后要用useState函数进行保存

3️⃣:将数据渲染到页面

   <Menu items={MenuItems} mode='inline' theme='dark' onClick={go}>

效果如图:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI 命名之羊驼

转眼进入 AI 时代&#xff0c;ChatGPT 吹起了一股大语言模型之风&#xff0c;恐怕羊驼们绝不曾想到&#xff0c;自己的种族竟也被卷入其中。 AI 产品的命名一向偏好晦涩的缩写。GPT&#xff08;Generative Pre-trained Transformers&#xff09;已经是最简明直白的一类。相比之…

gRPC入门教程

1.简介 gRPC是Google开发的一个跨平台、开源的远程过程调用(RPC)框架&#xff0c;可以使用Protocol Buffers作为接口定义语言(IDL)和底层消息交换格式。 在gRPC中&#xff0c;客户端应用程序可以直接调用位于不同机器上的服务器应用程序的方法&#xff0c;就像本地对象一样&a…

【Java笔试强训 2】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;排序子…

Linux-03目录管理

注意&#xff1a; 在下面的讲解中&#xff0c;每个命令都有很多的参数说明&#xff08;选项&#xff09;&#xff0c;我们只讲其中的几个&#xff0c;关键是让学生掌握命令的语法&#xff1b;学生学习完语法后&#xff0c;就可以自己按照参数书写各种命令&#xff0c;这也是我们…

UEngine运行器2.0.1——修复部分问题

介绍 新版本Deepin/UOS发布后&#xff0c;可以在应用商店安装部分官方已适配的安卓应用&#xff0c;对爱好者来说&#xff0c;不能自己安装APK软件包始终差点意思&#xff0c;本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包&#xff0c;并能发送安装的APK包…

语义分割学习笔记(五)U-net网络

推荐课程&#xff1a;U-Net网络结构讲解(语义分割)_哔哩哔哩_bilibili 感谢博主霹雳吧啦Wz 提供视频讲解和源码支持&#xff0c;真乃神人也&#xff01; 目录 1. U-net网络模型 2. 分割效果 3. U-Net源码解析(Pytorch版) 4. 测试结果 1. U-net网络模型 U-Net网络由两部分…

【Leetcode -147.对链表进行插入排序 -237.删除链表中的节点】

Leetcode Leetcode -147.对链表进行插入排序Leetcode - 237.删除链表中的节点 Leetcode -147.对链表进行插入排序 题目: 给定单个链表的头 head &#xff0c;使用 插入排序 对链表进行排序&#xff0c;并返回 排序后链表的头 。 插入排序 算法的步骤 : 插入排序是迭代的&…

设计模式-三种工厂模式的优缺点和使用场景

本文参考&#xff1a; 常见设计模式解析,应用场景以及优点(一)单例,工厂,抽象工厂,构造者_口怪物口的博客-CSDN博客_简述常见的工厂模式以及单例模式的使用场景 轻松理解工厂模式&#xff01;就等面试官问了&#xff01;_牛客网 (nowcoder.com) 工厂模式 工厂模式&#xff08;…

4.29补题记录

昨天做了俩道补题&#xff0c;感觉很自己有点无脑了 一、镜像最短距离 思路 首先这道题我最开始想的是bfs记录步数来做的&#xff0c;当时测试的时候没写出来&#xff0c;后来&#xff0c;看补题的时候&#xff0c;才发现这个就是简单的数学问题&#xff0c;我们只要计算出初…

项目管理软件可以用来做什么?这篇文章说清楚了

项目管理软件是用来干嘛的&#xff0c;就得看对项目的理解。项目是为创造独特的产品、服务或成果而进行的临时性工作。建造一座大楼可以是一个项目&#xff0c;进行一次旅游活动、日常办公活动、期末考试复习等也都可以看成一个项目。 项目管理不善会导致项目超时、超支、返工、…

javascript-算法基础-01

时间复杂度 O(1) O(n) O(n) O(2ⁿ) 记得有次面试, 让我求1 … n, 我说用for循环. 当时竟然都忘了等差数列公式了… 一个简单的求和 let res 0 // 1 for(let i; i < arr.length; i){ // 1res arr[i] // n }let res 0 for(const …

肝一肝设计模式【四】-- 建造者模式

系列文章目录 肝一肝设计模式【一】-- 单例模式 传送门 肝一肝设计模式【二】-- 工厂模式 传送门 肝一肝设计模式【三】-- 原型模式 传送门 肝一肝设计模式【四】-- 建造者模式 传送门 文章目录 系列文章目录前言一、什么是建造者模式二、举个栗子三、静态内部类写法四、开源框…

Golang-常见数据结构Map

Map map 是一种特殊的数据结构&#xff1a;一种元素对&#xff08;pair&#xff09;的无序集合&#xff0c;pair 的一个元素是 key&#xff0c;对应的另一个元素是 value&#xff0c;所以这个结构也称为关联数组或字典。这是一种快速寻找值的理想结构&#xff1a;给定 key&…

5 款 AI 老照片修复工具的横向比较

在大语言模型和各类 AI 应用日新月异的今天&#xff0c;我终于下定决心&#xff0c;趁着老照片们还没有完全发黄褪色、受潮粘连抑或损坏遗失&#xff0c;将上一代人实体相册里的纸质胶卷照片全部数字化&#xff0c;并进行一次彻底的 AI 修复&#xff0c;好让这些珍贵的记忆能更…

宽带IPTV单线复用

宽带IPTV单线复用 中国联通类&#xff1a; 1、前言 为了解决家里电视墙只预留了一个网口&#xff0c;IPTV无法与路由器共存的问题。 网络环境&#xff1a;中国联通 作者使用的路由器&#xff1a;云易家AX18C 2、光猫获取超管密码 黑龙江&#xff1a;hljcuadmin 重庆&…

HTML基础 + 实例解析

我们的目标: 认识HTML语言学会常用的HTML标签 目录 HTML的框架结构 HTML常见标签使用 1.注释标签 2. 标题标签 3. 段落标签 4. 换行标签 5. 格式化标签 6. 图片标签 7. 超链接标签 8. 表格标签 9. 表格标签-单元格合并 10. 列表标签 无序列表标签 有序标签 11. 表单标签 inp…

将 Quicker 搜索功能打造成专属于你的 Windows 启动器

在 macOS 平台上&#xff0c;有许多优秀的启动器&#xff0c;如老牌双雄 Alfred、Launchbar 和新秀 Raycast。反观 Windows 平台&#xff0c;则有 uTools、Listary、Wox 等应用&#xff0c;它们在基础功能上表现不错&#xff0c;但受限于应用生态&#xff0c;可拓展性都较弱。Q…

Java——Java面向对象

该系列博文会告诉你如何从入门到进阶&#xff0c;一步步地学习Java基础知识&#xff0c;并上手进行实战&#xff0c;接着了解每个Java知识点背后的实现原理&#xff0c;更完整地了解整个Java技术体系&#xff0c;形成自己的知识框架。 概述&#xff1a; Java是面向对象的程序…

【C++】类与对象(1)

【C】类与对象&#xff08;1&#xff09; 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2023.4.29 本篇博客是有关C类与对象的知识&#xff0c;学习了类与对象就相当于一只脚踏进了C的大门&#xff0c;本篇博客会深入讲解C中的类与对象&#xff08;重点为this指针&#xff…

C++知识点 -- 异常

C知识点 – 异常 文章目录 C知识点 -- 异常一、异常概念二、异常的使用1.异常的抛出和捕获2.异常的重新抛出3.异常安全4.异常规范 三、自定义异常体系四、C标准库的异常体系五、C异常的优缺点 一、异常概念 当一个函数发现自己无法处理错误时&#xff0c;就可以抛出异常&#…