跳到主要內容

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'