简体   繁体   中英

How to create dynamic menu in antdesign

I want to create dynamic menu in antdesign, in 4.19.5 version

Here code for static menu

<Menu selectable selectedKeys={activeKey}>
      
      { <Menu.SubMenu title="Main Title 1" >
        <Menu.Item key={'13'} onClick={(item) => SetActivekey([item.key])}><Link to={{  }} > Sub Title 1</Link> </Menu.Item>
        <Menu.Item key={'14'} onClick={(item) => SetActivekey([item.key])}><Link to={{  }} > Sub Title 2</Link></Menu.Item>
        <Menu.Item key={'15'} onClick={(item) => SetActivekey([item.key])}><Link to={{  }} > Sub Title 3</Link></Menu.Item>
      </Menu.SubMenu>}

      { <Menu.SubMenu title="Main Title 2">
        <Menu.Item key={'16'} onClick={(item) => SetActivekey([item.key])}><Link to={{  }} > Sub Title 4 </Link></Menu.Item>
        <Menu.Item key={'17'} onClick={(item) => SetActivekey([item.key])}><Link to={{  }} > Sub Title 5 </Link></Menu.Item>
        <Menu.Item key={'18'} onClick={(item) => SetActivekey([item.key])}><Link to={{  }} > Sub Title 6</Link></Menu.Item>
      </Menu.SubMenu>}

   </Menu>

Below is the data which I want to use to create menu

 var Arr=[{ 'Main Title 1': ['Sub Title 1', 'Sub Title 2', 'Sub Title 3'] }, { 'Main Title 2': ['Sub Title 4', 'Sub Title 5', 'Sub Title 6'] }]

You can simply create a function to construct that Submenus, for example

const arr = [
  { "Main Title 1": ["Sub Title 1", "Sub Title 2", "Sub Title 3"] },
  { "Main Title 2": ["Sub Title 4", "Sub Title 5", "Sub Title 6"] }
];

function constructSubmenus(arr) {
    return arr.map((e) => (
      <Menu.SubMenu title={Object.keys(e)[0]}>
        {Object.values(e)[0].map((f, i) => (
          <Menu.Item key={i}> {f} </Menu.Item>
        ))}
      </Menu.SubMenu>
    ));
  }
  return <Menu selectable>{constructSubmenus(arr)}</Menu>;

Another option is you can utilize the Menu 's attribute items if you can construct the array that can satisfy as the arguments for that attribute. You can check it on the documentation https://ant.design/components/menu

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM