React 动态菜单-不限级递归菜单树

React 动态菜单-不限级递归菜单树import{FC,useState}from”react”;import{Layout,Menu}from’antd’;import{Link}from’react-router-dom’import{getData}from”../../mock-data”;const{Header,Content,Footer,Sider}=Layout;//菜单数据结构typeMenuData={id:number,name:.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

import {FC, useState} from "react";
import {Layout, Menu} from 'antd';
import {Link} from 'react-router-dom'
import {getData} from "../../mock-data";

const {Header, Content, Footer, Sider} = Layout;

//菜单数据结构
type  MenuData = {
    id: number,
    name: string;
    link: string;
    children: MenuData[];
};

const Home: FC = (props) => {
    const [openKeys, setOpenKeys] = useState<string[]>([]);
    // setOpenKeys(props.openKeys)

    //定义方法:菜单无限级递归
    function tree(data: { id: string | number; name: string; link: string; children: any }[]) {
        return data.map((item) => {
            if (item.children === undefined) {
                return (<Menu.Item key={item.id}><Link
                    to={
  
  {pathname: item.link, state: {openKeys: openKeys}}}>{item.name}</Link></Menu.Item>)
            } else {
                return (
                    <Menu.SubMenu key={item.id} title={item.name}>
                        {tree(item.children)}
                    </Menu.SubMenu>
                )
            }
        })
    }

    //获取数据并绑定到类型上
    let menuData: MenuData[] = getData() as MenuData[];
    //动态菜单列表
    const elements = tree(menuData);

    return (
        <div>
            <Layout>
                <Sider style={
  
  {width: '100vw', height: '100vh'}}>
                    <Menu theme='dark' mode='inline' onOpenChange={keys => {
                        const keys1 = keys as string[];
                        setOpenKeys(keys1)
                    }}>
                        <div style={
  
  {height: "32px", margin: "16px", background: "rgba(255, 255, 255, 0.3)"}}/>
                        {elements}
                    </Menu>
                </Sider>
                <Layout>
                    <Header>Header</Header>
                    <Content>
                        {props.children}
                    </Content>
                    <Footer>Footer</Footer>
                </Layout>
            </Layout>
        </div>
    );
}
export default Home;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159442.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月26日 下午12:16
下一篇 2022年7月26日 下午12:16


相关推荐

  • ceph介绍_ceph为什么用rgw

    ceph介绍_ceph为什么用rgw一、Ceph简介:Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。ceph的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云环

    2022年8月2日
    7
  • PHPStorm安装主题插件

    PHPStorm安装主题插件因为 phpstorm 默认的主题实在是不能忍 又非常喜欢类似与 sublime 类型的主题 于是找到了国外的 phpstorm 主题站 http www phpstorm themes com 我下载的是 GeekNight 0 icls 就是第一个 看着很舒服 也可以在搜索框搜索主题 安装方法从网站首页进入帮助页面拉到下面找到 window 的描述目前我装的是 phpstorm2016 之前装了 ph

    2026年3月18日
    3
  • spring 注解验证@NotNull等使用方法「建议收藏」

    spring 注解验证@NotNull等使用方法「建议收藏」常用标签@Null被注释的元素必须为null@NotNull被注释的元素不能为null@AssertTrue被注释的元素必须为true@AssertFalse被注释的元素必须为false@Min(value)被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value)被注释的元素必须是一个数字,其值必须小于等于指定的最大值@DecimalMin(

    2022年6月13日
    33
  • 高通MSM8953 LK阶段配置使用I2C8[通俗易懂]

    高通MSM8953 LK阶段配置使用I2C8[通俗易懂]项目场景: 因为项目需要,需要在高通MSM8953平台的LK阶段使用I2C8设备。但是MSM8953平台LK阶段并没有配置好I2C8接口,因此调试I2C8成为当务之急。本文只介绍在LK阶段配置使用I2C5的方法。调试需要:1、文档:BAMLow-SpeedPeripherals(BLSP)UserGuide查看文档,有I2C介绍如下:I2c3对应的物理地址为0x78B7000,中断IRQ:97,时钟信号clk:clk_gcc_blsp1_qup3_i2c_apps_clk

    2022年10月19日
    5
  • java static 存在哪里_java中的静态变量和Class对象究竟存放在哪个区域?「建议收藏」

    java static 存在哪里_java中的静态变量和Class对象究竟存放在哪个区域?「建议收藏」JDK7的官方解释:CurrentlystaticfieldsarestoredintheinstanceKlassbutwhenthosearemovedintonativememorywe’dhavetohaveanewcardmarkstrategyforstaticfields.Thiscouldbesomethinglik…

    2022年5月7日
    90
  • Context7在Cursor中的使用方法

    Context7在Cursor中的使用方法

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号