Компонент Dropdown в Ant Design используется для создания контекстных меню, всплывающих списков и действий, которые раскрываются по клику или наведению. Он позволяет организовать пользовательский интерфейс так, чтобы элементы управления не занимали лишнего пространства и были доступны по требованию.
Основной принцип работы Dropdown заключается в сочетании триггера (элемента, на который пользователь кликает или наводит курсор) и меню (списка действий или опций, которые отображаются при активации).
import { Menu, Dropdown, Button } from 'antd';
import { DownOutlined } from '@ant-design/icons';
const menu = (
<Menu>
<Menu.Item key="1">Первый пункт</Menu.Item>
<Menu.Item key="2">Второй пункт</Menu.Item>
<Menu.Item key="3">Третий пункт</Menu.Item>
</Menu>
);
<Dropdown overlay={menu}>
<Button>
Действия <DownOutlined />
</Button>
</Dropdown>
Menu.['click'], ['hover']).bottomLeft, bottomRight,
topLeft, topRight).Dropdown может открываться при различных действиях пользователя. По умолчанию используется клик, но можно настроить и другие варианты:
<Dropdown overlay={menu} trigger={['hover']}>
<Button>Наведи на меня</Button>
</Dropdown>
Ключевые моменты:
click — меню открывается по клику.hover — меню открывается при наведении.contextMenu — открытие по правому клику.Комбинация нескольких триггеров позволяет создавать более гибкие интерфейсы.
Свойство placement определяет расположение выпадающего меню относительно триггера:
<Dropdown overlay={menu} placement="bottomRight">
<Button>Меню справа</Button>
</Dropdown>
Возможные значения:
bottomLeft — стандартное расположение под триггером
слева.bottomRight — под триггером справа.topLeft — над триггером слева.topRight — над триггером справа.Dropdown можно сделать управляемым с использованием состояния компонента. Это позволяет контролировать открытие и закрытие меню программно.
import { useState } from 'react';
const ControlledDropdown = () => {
const [visible, setVisible] = useState(false);
const handleVisibleChange = (flag) => {
setVisible(flag);
};
return (
<Dropdown
overlay={menu}
onVisibleCha nge={handleVisibleChange}
visible={visible}
>
<Button>Управляемое меню</Button>
</Dropdown>
);
};
Параметры управляемого Dropdown:
visible — состояние видимости меню.onVisibleChange — функция, вызываемая при изменении
состояния меню.Dropdown поддерживает различные стили и кастомные компоненты внутри
меню. Например, можно использовать Menu.Divider для
разделения пунктов:
const menu = (
<Menu>
<Menu.Item key="1">Опция 1</Menu.Item>
<Menu.Divider />
<Menu.Item key="2">Опция 2</Menu.Item>
</Menu>
);
Для добавления иконок используется компонент Icon из Ant
Design:
<Menu.Item key="3" icon={<DownOutlined />}>
С пунктом иконки
</Menu.Item>
Dropdown не ограничен компонентом Menu. Можно передавать
любой React-элемент через overlay:
<Dropdown
overlay={
<div style={{ padding: 16, background: '#fff', border: '1px solid #ccc' }}>
<p>Произвольный контент</p>
<Button type="primary">Действие</Button>
</div>
}
>
<Button>Кастомный Dropdown</Button>
</Dropdown>
Это особенно полезно для создания форм, уведомлений или сложных интерактивных меню.
Ant Design использует библиотеку rc-motion для плавного
появления Dropdown. По умолчанию применяется эффект fade с небольшим
смещением:
<Dropdown overlay={menu} transitionName="slide-up">
<Button>Анимированный Dropdown</Button>
</Dropdown>
Совет: можно настроить кастомные анимации через CSS,
изменяя классы .ant-dropdown-slide-up-enter и
.ant-dropdown-slide-up-leave.
Компонент Dropdown.Button объединяет кнопку и выпадающее меню в один элемент, где основная кнопка выполняет действие, а стрелка раскрывает меню:
<Dropdown.Button overlay={menu} onCl ick={() => console.log('Главная кнопка')}>
Действие
</Dropdown.Button>
Преимущества:
Dropdown поддерживает несколько ключевых событий:
onVisibleChange(visible) — вызывается при
открытии/закрытии меню.onClick внутри Menu — обработка клика по пункту
меню.onOpenChange — аналог onVisibleChange в
новых версиях, обеспечивает контроль над состоянием.Пример обработки выбора пункта:
const handleMenuClick = (e) => {
console.log('Выбран пункт:', e.key);
};
const menu = (
<Menu onCl ick={handleMenuClick}>
<Menu.Item key="1">Пункт 1</Menu.Item>
<Menu.Item key="2">Пункт 2</Menu.Item>
</Menu>
);
SubMenu.trigger и placement
позволяет создавать контекстные меню, похожие на нативные в десктопных
приложениях.Dropdown в Ant Design — мощный инструмент для организации контекстного взаимодействия, который сочетает простоту использования с гибкой кастомизацией, поддержкой событий и анимаций, что делает его универсальным компонентом для любого интерфейса на JavaScript.