Dropdown Menu 在触发器下方展开一组动作项。下方预览由 pingo 引擎实时渲染——点击触发器即可开合,并跟随站点主题切换明暗。
用法
import {
Button,
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@dopejs/pingo-ui";
root.render(
<DropdownMenu onValueChange={(value) => run(value)}>
<DropdownMenuTrigger>
<Button onPress={() => {}}>打开菜单</Button>
</DropdownMenuTrigger>
<DropdownMenuContent>
<DropdownMenuItem value="profile">个人资料</DropdownMenuItem>
<DropdownMenuItem value="settings">设置</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>,
);
Trigger 与 Content 通过 context 读取根组件状态,必须作为同一个 DropdownMenu 的子节点。选择一项后触发 onValueChange 并自动关闭菜单。开合默认非受控(defaultOpen),组件不提供受控 open prop——需要完全受控的列表选择请使用 Select(两者共享同一实现)。
Props
| Prop |
类型 |
默认值 |
说明 |
value |
string |
— |
当前选中值(高亮对应项) |
defaultOpen |
boolean |
false |
初始开合 |
onValueChange |
(value: string) => void |
— |
选择菜单项回调 |
onOpenChange |
(open: boolean) => void |
— |
开合变化回调 |
children |
PingoNode |
— |
Trigger 与 Content(必填) |
className |
string |
— |
追加在锚点容器类名之后 |
| Prop |
类型 |
默认值 |
说明 |
children |
PingoNode |
— |
触发元素;缺省时渲染当前值/占位文本 |
placeholder |
string |
— |
无选中值时的占位文本 |
className |
string |
— |
追加类名 |
| Prop |
类型 |
默认值 |
说明 |
children |
PingoNode |
— |
菜单项(必填) |
className |
string |
— |
追加类名 |
| Prop |
类型 |
默认值 |
说明 |
value |
string |
— |
菜单项值(必填) |
children |
string |
— |
显示文案(必填) |
className |
string |
— |
追加类名 |
无障碍
菜单具备 menu 语义、菜单项具备 menuitem 语义;打开后方向键上下移动,Enter/Space 选择,Escape 关闭并把焦点交还触发器。