Компонент Menu в Ant Design используется для создания навигационных панелей, боковых меню и сложных систем с вложенными пунктами. Он поддерживает горизонтальное и вертикальное расположение, многоуровневые подпункты, а также интеграцию с маршрутизацией в React-приложениях.
Для начала работы с Menu требуется импортировать его из библиотеки:
import { Menu } from 'antd';
Базовая структура Menu состоит из Menu.Item и SubMenu:
<Menu mode="horizontal">
<Menu.Item key="home">
Главная
</Menu.Item>
<Menu.Item key="about">
О нас
</Menu.Item>
<Menu.SubMenu key="services" title="Услуги">
<Menu.Item key="web">Веб-разработка</Menu.Item>
<Menu.Item key="mobile">Мобильные приложения</Menu.Item>
</Menu.SubMenu>
</Menu>
horizontal
(горизонтальное), vertical (вертикальное),
inline (вертикальное меню с выдвижением подпунктов).Menu поддерживает выделение активного элемента с помощью свойства selectedKeys:
const [current, setCurrent] = useState('home');
<Menu
onCl ick={(e) => setCurrent(e.key)}
selectedKeys={[current]}
mode="horizontal"
>
<Menu.Item key="home">Главная</Menu.Item>
<Menu.Item key="about">О нас</Menu.Item>
</Menu>
Для создания многоуровневых меню используется SubMenu:
<Menu mode="inline">
<Menu.SubMenu key="products" title="Продукты">
<Menu.Item key="laptop">Ноутбуки</Menu.Item>
<Menu.SubMenu key="phones" title="Смартфоны">
<Menu.Item key="android">Android</Menu.Item>
<Menu.Item key="ios">iOS</Menu.Item>
</Menu.SubMenu>
</Menu.SubMenu>
</Menu>
Каждый пункт меню может содержать иконку, импортированную из @ant-design/icons:
import { MailOutlined, AppstoreOutlined } from '@ant-design/icons';
<Menu mode="horizontal">
<Menu.Item key="mail" icon={<MailOutlined />}>
Почта
</Menu.Item>
<Menu.SubMenu key="apps" icon={<AppstoreOutlined />} title="Приложения">
<Menu.Item key="calendar">Календарь</Menu.Item>
</Menu.SubMenu>
</Menu>
С помощью openKeys и onOpenChange можно контролировать открытие подпунктов:
const [openKeys, setOpenKeys] = useState([]);
<Menu
mode="inline"
openKeys={openKeys}
onOpenCha nge={(keys) => setOpenKeys(keys)}
>
<Menu.SubMenu key="products" title="Продукты">
<Menu.Item key="laptop">Ноутбуки</Menu.Item>
<Menu.Item key="phones">Смартфоны</Menu.Item>
</Menu.SubMenu>
</Menu>
При использовании с react-router-dom удобно заменять Menu.Item на Link, сохраняя ключи для выделения:
import { Link } from 'react-router-dom';
<Menu selectedKeys={[current]} onCl ick={(e) => setCurrent(e.key)} mode="horizontal">
<Menu.Item key="/">
<Link to="/">Главная</Link>
</Menu.Item>
<Menu.Item key="/about">
<Link to="/about">О нас</Link>
</Menu.Item>
</Menu>
<Menu.Item key="settings" disabled>Настройки</Menu.Item>.light или dark.<Menu mode="horizontal" theme="dark">
<Menu.Item key="dashboard">Панель</Menu.Item>
</Menu>
</Menu>
Для организации логически связанных пунктов можно применять Menu.ItemGroup:
<Menu mode="vertical">
<Menu.ItemGroup key="group1" title="Категория 1">
<Menu.Item key="item1">Пункт 1</Menu.Item>
<Menu.Item key="item2">Пункт 2</Menu.Item>
</Menu.ItemGroup>
<Menu.ItemGroup key="group2" title="Категория 2">
<Menu.Item key="item3">Пункт 3</Menu.Item>
</Menu.ItemGroup>
</Menu>
Menu поддерживает добавление собственного CSS через свойства className и style:
<Menu mode="horizontal" className="custom-menu" style={{ backgroundColor: '#f0f0f0' }}>
<Menu.Item key="home">Главная</Menu.Item>
</Menu>
Menu в Ant Design предоставляет гибкую и мощную систему навигации, легко интегрируемую с современными React-приложениями и поддерживающую сложные вложенные структуры.