为页面和功能提供导航的菜单列表。
导航菜单是一个网站的灵魂,用户依赖导航在各个页面中进行跳转。一般分为顶部导航和侧边导航,顶部导航提供全局性的类目和功能,侧边导航提供多级结构来收纳和排列网站架构。
展示菜单项选择用法。
- 单选带符号:一般用于
SelectCascaderSelect等单选模式下,需要数据返显,二次查看确认的组件中;- 单选不带符号:一般用于导航等,不需要数据返显的组件中;
- 多选:必须要带符号
| 参数 | 说明 | 类型 | 默认值 | 是否必填 |
|---|---|---|---|---|
| children | 菜单项和子菜单 | React.ReactNode | - | |
| openKeys | 当前打开的子菜单的 key 值(受控) | string | string[] | - | |
| defaultOpenKeys | 初始打开的子菜单的 key 值(非受控) | string | string[] | [] | |
| defaultOpenAll | 初始展开所有的子菜单,只在 mode 设置为 'inline' 以及 openMode 设置为 'multiple' 下生效,优先级高于 defaultOpenKeys | boolean | false | |
| onOpen | 打开或关闭子菜单触发的回调函数 签名: 参数: keys: 打开的所有子菜单的 key 值 extra: 当前被操作子菜单的信息 |
(keys: string[], extra: { key: string; open: boolean }) => void | - | |
| mode | 子菜单打开的模式 | Mode | 'inline' | |
| triggerType | 子菜单打开的触发行为 | 'click' | 'hover' | 'click' | |
| openMode | 展开内连子菜单的模式,同时可以展开一个子菜单还是多个子菜单,该属性仅在 mode 为 inline 时生效 | 'single' | 'multiple' | 'multiple' | |
| inlineIndent | 内连子菜单缩进距离 | number | 20 | |
| popupAutoWidth | 是否自动让弹层的宽度和菜单项保持一致 | boolean | false | |
| popupAlign | 弹层的对齐方式 | 'follow' | 'outside' | 'follow' | |
| popupProps | 弹层自定义 props | PopupProps | ((popupItemProps: PopupItemProps) => PopupProps) | - | |
| popupClassName | 弹出子菜单自定义 className | string | - | |
| popupStyle | 弹出子菜单自定义 style | React.CSSProperties | - | |
| selectedKeys | 当前选中菜单项的 key 值(受控) | string | string[] | - | |
| defaultSelectedKeys | 初始选中菜单项的 key 值(非受控) | string | string[] | - | |
| onSelect | 选中或取消选中菜单项触发的回调函数 签名: 参数: selectedKeys: 选中的所有菜单项的值 item: 选中或取消选中的菜单项 extra: 选中时的额外参数 |
(selectedKeys: string[], item: SelectableItem, extra: SelectExtra) => void | - | |
| selectMode | 选中模式,单选还是多选,默认无值,不可选 | 'single' | 'multiple' | - | |
| shallowSelect | 是否只能选择第一层菜单项(不能选择子菜单中的菜单项) | boolean | false | |
| hasSelectedIcon | 是否显示选中图标,如果设置为 false 需配合配置平台设置选中时的背景色以示区分 | boolean | true | |
| isSelectIconRight | 是否将选中图标居右,仅当 hasSelectedIcon 为 true 时生效。 | boolean | false | |
| direction | 菜单第一层展示方向 | 'ver' | 'hoz' | 'ver' | |
| hozAlign | 横向菜单条 item 和 footer 的对齐方向,在 direction 设置为 'hoz' 并且 header 存在时生效 | 'left' | 'right' | 'left' | |
| header | 自定义菜单头部 | React.ReactNode | - | |
| footer | 自定义菜单尾部 | React.ReactNode | - | |
| footerWrapperClassName | 自定义菜单尾部容器的 className | string | - | |
| autoFocus | 是否自动获得焦点 | boolean | false | |
| focusedKey | 当前获得焦点的子菜单或菜单项 key 值 | string | - | |
| focusable | 是否可以获得焦点 | boolean | true | |
| onItemFocus | 菜单项获得焦点时的回调函数 签名: 参数: key: 菜单项的 key item: 菜单项组件实例 event: 事件对象 |
( key: string, item: MenuItem, event: React.MouseEvent | React.KeyboardEvent ) => void |
- | |
| onItemClick | 点击菜单项触发的回调函数 签名: 参数: key: 点击的菜单项的 key 值 item: 点击的菜单项对象 event: 事件对象 |
( key: string, item: MenuItem, event: React.MouseEvent | React.KeyboardEvent ) => void |
- | |
| onItemKeyDown | 菜单项触发键盘按下的回调函数 签名: 参数: key: 菜单项的 key 值 item: 菜单项对象 event: 事件对象 |
( key: string | null | undefined, item: MenuItem, event: React.KeyboardEvent ) => void |
- | |
| embeddable | 是否开启嵌入式模式,开启后没有默认背景、外层 border、box-shadow | boolean | false | |
| icons | 自定义内部使用的图标 | { select?: React.ReactNode; } |
- | |
| hozInLine | 横向菜单模式下,是否维持在一行,即超出一行折叠成 SubMenu 显示 | boolean | - | |
| renderMore | 自定义渲染超出一行的菜单项(hozInLine = true 时生效) 签名: 参数: items: 被折叠的菜单项 返回值: 渲染内容 |
( items?: React.ReactElement[] ) => React.ReactElement<{ className?: string; style?: React.CSSProperties }> |
- | |
| inlineArrowDirection | 子菜单展开箭头的方向 | 'down' | 'right' | 'down' | |
| labelToggleChecked | 标签是否可触发 checked 状态变化 | boolean | true | |
| expandAnimation | 展开菜单时使用动画 | boolean | true | |
| itemClassName | 菜单项的类型 | string | - | |
| flatenContent | 将菜单项 DOM 结构平铺在容器内 | boolean | - |
| 参数 | 说明 | 类型 | 默认值 | 是否必填 |
|---|---|---|---|---|
| label | 标签内容 | React.ReactNode | - | |
| selectable | 是否可选,该属性仅在设置 Menu 组件 selectMode 属性后生效 | boolean | false | |
| mode | 子菜单打开方式,如果设置会覆盖 Menu 上的同名属性 | Mode | - | |
| children | 菜单项或下一级子菜单 | React.ReactNode | - | |
| level | 菜单层级 | number | - | |
| noIcon | 是否没有图标 | boolean | false | |
| subMenuContentClassName | 子菜单内容节点的类名 | string | - |
| 参数 | 说明 | 类型 | 默认值 | 是否必填 |
|---|---|---|---|---|
| label | 标签内容 | React.ReactNode | - | |
| children | 自定义弹层内容 | React.ReactNode | - | |
| hasSubMenu | 是否拥有子菜单 | boolean | - | |
| triggerType | 子菜单打开的触发方式,如果设置会覆盖 Menu 上的同名属性 | 'click' | 'hover' | - | |
| align | 弹层的对齐方式 | 'follow' | 'outside' | - | |
| selectable | 是否可选,该属性仅在设置 Menu 组件 selectMode 属性后生效 | boolean | false | |
| autoWidth | 是否自动让弹层的宽度和菜单项保持一致 | boolean | - |
该子组件选中情况不受 defaultSelectedKeys/selectedKeys 控制,请自行控制选中逻辑
| 参数 | 说明 | 类型 | 默认值 | 是否必填 |
|---|---|---|---|---|
| checked | 是否选中 | boolean | false | |
| indeterminate | 是否半选中 | boolean | false | |
| disabled | 是否禁用 | boolean | false | |
| onChange | 选中或取消选中触发的回调函数 签名: 参数: checked: 是否选中 event: 事件对象 |
( checked: boolean, event: React.MouseEvent | React.KeyboardEvent | React.ChangeEvent ) => void |
- | |
| helper | 帮助文本 | React.ReactNode | - | |
| children | 标签内容 | React.ReactNode | - |
该子组件选中情况不受 defaultSelectedKeys/selectedKeys 控制,请自行控制选中逻辑
| 参数 | 说明 | 类型 | 默认值 | 是否必填 |
|---|---|---|---|---|
| checked | 是否选中 | boolean | false | |
| disabled | 是否禁用 | boolean | false | |
| onChange | 选中或取消选中触发的回调函数 签名: 参数: checked: 是否选中 event: 事件对象 |
(checked: boolean, event: React.MouseEvent | React.KeyboardEvent) => void | - | |
| helper | 帮助文本 | React.ReactNode | - | |
| children | 标签内容 | React.ReactNode | - |
| 参数 | 说明 | 类型 | 默认值 | 是否必填 |
|---|---|---|---|---|
| label | 标签内容 | React.ReactNode | - | |
| children | 菜单项 | React.ReactChild | React.ReactChild[] | - | 是 |
分隔线
触发菜单选中状态变化时的额外信息
| 参数 | 说明 | 类型 | 默认值 | 是否必填 |
|---|---|---|---|---|
| key | 被选中菜单的 key | string | - | 是 |
| select | 是否选中状态 | boolean | - | 是 |
| label | 菜单的标签 | React.ReactNode | - | 是 |
| keyPath | 被操作菜单项的 key 全路径 | string[] | - | 是 |
| labelPath | 被操作菜单项的 label 全路径 | React.ReactNode[] | - | 是 |
子菜单打开的模式
export type Mode = 'inline' | 'popup';
创建上下文菜单。
| 按键 | 说明 |
|---|---|
| Up Arrow | 导航到上一项 |
| Down Arrow | 导航到下一项 |
| Right Arrow | 打开子菜单,导航到子菜单第一项;横向菜单条第一层,导航到右一项 |
| Left Arrow | 关闭子菜单,导航到父级菜单;横向菜单条第一层,导航都左一项 |
| Enter | 打开子菜单,导航到子菜单第一项 |
| Esc | 关闭子菜单,导航到父级菜单 |
| SPACE | 切换选中状态 |