Skyroc UI
导航

Menubar

用于构建横向应用菜单和多级菜单的菜单栏组件

Menubar 用于构建类似桌面应用的横向菜单栏。组件基于 Radix Menubar,并复用项目 Menu 的菜单项、分隔线、子菜单、checkbox 和 radio 组选项能力。

import {
  Menubar,
  MenubarContent,
  MenubarItem,
  MenubarMenu,
  MenubarRoot,
  MenubarTrigger
} from '@skyroc/web-ui';

何时使用

  • 需要在顶部区域展示应用级菜单,例如 File、Edit、View。
  • 菜单项包含快捷键、分隔线、子菜单、checkbox 或 radio 选项。
  • 需要键盘可访问的横向菜单栏。
  • 普通下拉操作菜单优先使用 DropdownMenu;右键上下文菜单使用 ContextMenu。

基础用法

通过 items 传入菜单数据。每个顶层 item 会渲染一个菜单触发器和一个内容面板。

Preview
Code
Loading...

顶层菜单类型

Menubar 支持三类顶层菜单:

type说明
item默认菜单,children 使用普通菜单项数据
checkboxcheckbox 菜单组,支持多选
radioradio 菜单组,支持单选

菜单项类型

普通菜单的 children 复用 Menu 的数据结构,支持 item、label、separator 和 sub。

const fileMenu = [
  { label: 'New Tab', shortcut: '⌘T' },
  { type: 'separator' },
  {
    type: 'sub',
    label: 'Share',
    children: [
      { label: 'Email link' },
      { label: 'Messages' }
    ]
  }
];

受控选项

checkbox 顶层菜单通过 checksonChecksChange 管理选中值;radio 顶层菜单通过 valueonValueChange 管理当前值。

尺寸与样式

通过 size 控制根菜单栏间距和菜单项尺寸。通过 classNames 控制菜单内容、菜单项、快捷键和触发器等 slot,其中 trigger 是 Menubar 额外扩展的 slot。

API

通用属性参考:基于 Radix Menubar Root,并使用 items 渲染数据驱动菜单栏。

属性说明类型默认值
items*顶层菜单数据MenubarOption[]-
size尺寸,影响菜单栏间距和菜单项尺寸'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
classNames菜单相关 slot 的自定义 class,额外支持 triggerMenubarClassNames-
className根菜单栏 classClassValue-
value受控模式下当前打开的顶层菜单 valuestring-
defaultValue非受控模式下默认打开的顶层菜单 valuestring-
onValueChange打开的顶层菜单变化时触发(value: string) => void-
loop键盘导航是否循环boolean-
dir文本方向'ltr' | 'rtl'-

顶层菜单项

items 中的每个对象都会渲染为一个顶层菜单。

属性说明类型默认值
label*顶层菜单触发器内容ReactNode-
type顶层菜单类型'item' | 'checkbox' | 'radio''item'
children*当前菜单的子项数据MenuOptionData[] | MenuCheckboxGroupItemProps[] | MenuRadioItemOptionProps[]-
checkscheckbox 菜单当前选中的值列表string[]-
onChecksChangecheckbox 菜单选中值变化时触发(checks: string[]) => void-
valueradio 菜单当前选中的值,或顶层菜单 valuestring-
onValueChangeradio 菜单选中值变化时触发(value: string) => void-
leading顶层触发器前置内容ReactNode-
trailing顶层触发器后置内容ReactNode-
shortcut顶层触发器快捷键提示string | string[]-

结构组件

Menubar 同时导出 Radix 风格结构组件,适合需要完全手动组合菜单结构时使用。

属性说明类型默认值
MenubarRoot根菜单栏容器MenubarRootProps-
MenubarMenuRadix Menu 原语包装MenubarMenuPrimitiveProps-
MenubarTrigger顶层菜单触发器MenubarTriggerProps-
MenubarContent菜单内容容器,默认通过 Portal 渲染MenubarContentProps-
MenubarItem普通菜单项MenubarItemProps-
MenubarLabel菜单分组标签MenubarLabelProps-
MenubarSeparator菜单分隔线MenubarSeparatorProps-
MenubarSub子菜单根组件MenubarSubProps-
MenubarSubTrigger子菜单触发项MenubarSubTriggerProps-
MenubarSubContent子菜单内容MenubarSubContentProps-
MenubarCheckboxItemcheckbox 菜单项MenubarCheckboxItemProps-
MenubarRadioItemradio 菜单项MenubarRadioItemProps-
MenubarRadioGroupRadix RadioGroup 原语包装MenubarRadioGroupPrimitiveProps-
MenubarRadioGroupData数据驱动 radio 组MenubarRadioGroupProps-
MenubarCheckboxGroup数据驱动 checkbox 组MenubarCheckboxGroupProps-
MenubarShortcut快捷键展示MenubarShortcutProps-

类型

MenubarProps

主组件属性。继承 Radix Menubar Root props,并通过 items 渲染数据驱动菜单。

字段类型说明
classNameClassValue根菜单栏 class。
classNamesMenubarClassNames菜单 slot class,额外支持 trigger。
defaultValuestring默认打开的顶层菜单 value。
dir'ltr' | 'rtl'文本方向。
items*MenubarOption[]顶层菜单数据。
loopboolean键盘导航是否循环。
onValueChange(value: string) => void打开菜单变化回调。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。
valuestring受控打开的顶层菜单 value。

MenubarOption

顶层菜单数据。根据 type 分为普通菜单、checkbox 菜单和 radio 菜单。

字段类型说明
labelReactNode顶层菜单触发器内容。
type'item' | 'checkbox' | 'radio'顶层菜单类型。默认普通菜单可省略。
childrenMenuOptionData[] | MenuCheckboxGroupItemProps[] | MenuRadioItemOptionProps[]子项数据。
checksstring[]checkbox 菜单选中值列表。
onChecksChange(checks: string[]) => voidcheckbox 菜单选中值变化回调。
valuestringradio 菜单选中值或顶层菜单 value。
onValueChange(value: string) => voidradio 菜单值变化回调。
leadingReactNode触发器前置内容。
trailingReactNode触发器后置内容。
shortcutstring | string[]快捷键提示。

MenuOptionData

普通菜单子项数据。

字段类型说明
type'item' | 'label' | 'separator' | 'sub'菜单项类型。普通 item 可省略。
labelReactNode菜单项内容。
childrenMenuOptionData[]子菜单 children,仅 sub 类型使用。
disabledboolean是否禁用。
leadingReactNode前置内容。
trailingReactNode后置内容。
shortcutstring | string[]快捷键提示。

MenubarClassNames

Menubar classNames 类型。继承 MenuClassNames,并额外增加 trigger。

字段类型说明
triggerClassValue顶层触发器 class。
contentClassValue菜单内容 class,来自 MenuClassNames。
itemClassValue菜单项 class,来自 MenuClassNames。
shortcutClassValue快捷键 class,来自 MenuClassNames。
labelClassValue标签 class,来自 MenuClassNames。
separatorClassValue分隔线 class,来自 MenuClassNames。

MenubarRootProps

根菜单栏属性。继承 Radix Menubar Root props,并支持 className 和 size。

字段类型说明
childrenReactNode菜单栏内容。
classNameClassValue根菜单栏 class。
defaultValuestring默认打开菜单 value。
dir'ltr' | 'rtl'文本方向。
loopboolean键盘导航是否循环。
onValueChange(value: string) => void打开菜单变化回调。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。
valuestring受控打开菜单 value。

MenubarTriggerProps

顶层触发器属性。继承 Radix Trigger props,并支持前后插槽和 shortcut。

字段类型说明
childrenReactNode触发器内容。
classNameClassValue触发器 class。
classNamesMenubarTriggerClassNames触发器相关 slot class。
leadingReactNode前置内容。
shortcutstring | string[]快捷键提示。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。
trailingReactNode后置内容。

MenubarContentProps

菜单内容属性。继承 Radix Content props,默认 align=start、alignOffset=-4、sideOffset=8。

字段类型说明
align'start' | 'center' | 'end'对齐方式。默认值为 start。
alignOffsetnumber对齐偏移。默认值为 -4。
childrenReactNode菜单内容。
classNameClassValue内容 class。
sideOffsetnumber侧向偏移。默认值为 8。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。

MenubarItemProps

普通菜单项属性。复用 MenuItemProps,并支持 inset。

字段类型说明
childrenReactNode菜单项内容。
classNameClassValue菜单项 class。
disabledboolean是否禁用。
insetboolean是否增加左侧缩进。
leadingReactNode前置内容。
shortcutstring | string[]快捷键提示。
trailingReactNode后置内容。

MenubarCheckboxGroupProps

数据驱动 checkbox 菜单组属性。

字段类型说明
checksstring[]选中值列表。
items*MenuCheckboxGroupItemProps[]checkbox 菜单项数据。
onChecksChange(checks: string[]) => void选中值变化回调。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。

MenubarRadioGroupProps

数据驱动 radio 菜单组属性。

字段类型说明
items*MenuRadioItemOptionProps[]radio 菜单项数据。
onValueChange(value: string) => void选中值变化回调。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。
valuestring当前选中值。

MenubarShortcutProps

快捷键展示属性。children 为字符串时会作为 shortcut value 展示。

字段类型说明
childrenReactNode快捷键内容。字符串会被转换为 value。
classNameClassValue快捷键 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。

MenubarMenuPrimitiveProps

MenubarMenu 透传的 Radix Menu props

radix menubar menu props

MenubarMenuComposedProps

内部使用的数据驱动顶层菜单组合属性

MenubarTriggerProps with trigger, value and children

MenubarLabelProps

MenubarLabel 复用 MenuLabelProps

menu label props

MenubarOptionProps

MenubarOption 复用 MenuOptionProps 并替换内部组件

menu option props

MenubarItemIndicatorProps

MenubarItemIndicator 复用 MenuItemIndicatorProps

menu item indicator props

MenubarSeparatorProps

MenubarSeparator 复用 MenuSeparatorProps

menu separator props

MenubarSubContentProps

MenubarSubContent 复用 MenuSubContentProps

menu sub content props

MenubarSubTriggerProps

MenubarSubTrigger 复用 MenuSubTriggerProps

menu sub trigger props

MenubarCheckboxItemProps

MenubarCheckboxItem 复用 MenuCheckboxItemProps

menu checkbox item props

MenubarRadioItemProps

MenubarRadioItem 复用 MenuRadioItemProps

menu radio item props

MenubarRadioGroupPrimitiveProps

MenubarRadioGroup 透传的 Radix RadioGroup props

radix menubar radio group props

MenubarGroupProps

MenubarGroup 透传的 Radix Group props

radix menubar group props

MenubarPortalProps

MenubarPortal 透传的 Radix Portal props

radix menubar portal props

MenubarSubProps

MenubarSub 透传的 Radix Sub props

radix menubar sub props

MenubarTriggerClassNames

MenubarTrigger 可配置的 slot class

{ trigger?: ClassValue; shortcut?: ClassValue }

MenubarSlots

Menubar 根组件 slot

'root'

ClassValue

CSS 类名类型

string | null | undefined | Record<string, boolean> | ClassValue[]

On this page