跳到主要内容

Dropdown 下拉菜单

将动作菜单折叠到触发器之下,悬停或点击展开。菜单为 role="menu" 语义, 支持完整键盘导航(方向键 / Home / End / Enter / Esc)与 roving tabindex。

基础用法​

悬停 / 点击触发与命令式用法
import { LhButton, LhDropdown, LhDropdownItem } from '@lh-ui/react'

export default function Demo() {
return (
<LhDropdown
onCommand={(command) => console.log(command)}
dropdown={
<>
<LhDropdownItem command="new">新建</LhDropdownItem>
<LhDropdownItem command="delete" disabled>
删除
</LhDropdownItem>
</>
}
>
<LhButton>展开</LhButton>
</LhDropdown>
)
}
属性说明类型可选值默认值
children触发器节点ReactNode——
dropdown菜单内容(LhDropdownItem 列表,对应 plus 的 #dropdown 插槽)ReactNode——
trigger触发方式'hover' | 'click' | 'contextmenu'—'hover'
placement展示位置LhDropdownPlacementtop / bottom(含 -start / -end)等'bottom-start'
disabled禁用boolean—false
visible受控显隐boolean——
defaultVisible非受控默认显隐boolean—false
hideOnClick点击菜单项后是否自动关闭boolean—true
maxHeight菜单最大高度(超出滚动)string | number——
popperClass菜单自定义类名string——
themeVars组件级主题变量Record<string, string>——
sx快速布局属性(作用于触发器)SxProps——
事件说明回调签名Vue 对照
onCommand菜单项被点击,抛出该项的 command(command: string | number) => voidcommand
onVisibleChange显隐变化(visible: boolean) => voidupdate:visible
onClickOutside点击菜单外部(同时内部会关闭)() => voidclick-outside
属性说明类型可选值默认值
children菜单项内容ReactNode——
command命令标识,随 onCommand 抛出string | number——
disabled是否禁用(不响应点击且不参与键盘导航)boolean—false
divided是否显示分隔线boolean—false
事件说明回调签名Vue 对照
onClick点击菜单项(与 onCommand 可共存)() => void—

ref​

forwardRef<LhDropdownInstance>。LhDropdownInstance 暴露 show() / hide() / toggle() / isVisible。

键盘导航(APG menu pattern)

打开菜单后焦点落在首个启用项;ArrowUp / ArrowDown 循环移动并跳过禁用项, Home / End 直达首尾,Enter / Space 激活当前项,Esc 关闭并把焦点归还触发器。 仅锚点项 tabIndex={0},其余为 -1(roving tabindex)。

插槽 → prop

plus 用 #dropdown 插槽承载菜单,React 侧改为同名 dropdown prop; contextmenu 触发会阻止浏览器默认右键菜单。

样式​

import '@lh-ui/react/style/dropdown'