ContextMenu
ContextMenu — меню по правому клику на области. Область — это children: компонент оборачивает их в div и вешает обработчик на него, так что внутри могут быть ссылки и кнопки. Пункты описываются массивом items, где элемент — либо { separator: true } (разделитель групп), либо пункт: обязательные value и label плюс icon, variant (danger для разрушающих действий), disabled и вложенный items (подменю). Состояния открытия у компонента нет — потребитель получает только onSelect(value) и ветвится по значению выбранного пункта; в IDE пункты обычно зовут команды реестра. Меню порталится в body и монтируется лениво при открытии. Родня: DropdownMenu — то же меню, но открывается кликом по своему триггеру; MenuItemButton — одиночный пункт того же вида вне меню (например, в popover крошек или в сайдбаре).
Использует: MenuItems
Анатомия
Примеры
Подменю
Пункт с собственным items становится триггером вложенного меню: оно раскрывается по наведению, а его value приходят в тот же onSelect. У самого пункта-триггера value используется только как ключ — выбрать его нельзя.
Область клика
Своих стилей у обёртки триггера нет — её размер задаёт className. Без него область равна высоте содержимого, и правый клик по пустому месту под списком меню не откроет; height: 100% растягивает её на всю панель.
Вложенные области
Меню можно вкладывать: у списка своё (действия над списком), у каждой строки — своё. Выигрывает ближайшее к курсору: клик по строке открывает меню строки, клик мимо строк — меню списка.
API
| Prop | Type | Default |
|---|---|---|
items*Пункты меню: | MenuItem[] | - |
onSelect*Вызывается при выборе пункта со значением | (value: string) => void | - |
children*Область, по правому клику на которой открывается меню | ReactNode | - |
classNameКласс div-обёртки триггера — например, чтобы растянуть область клика | string | - |