Skip to content

DropdownMenu 下拉菜单 ​

向下弹出的菜单列表,用于承载一组操作命令。

基础用法 ​

tsx
import { DropdownMenu, MenuItem, MenuDivider, MenuGroup } from '@airo-ui/react'

function Demo() {
  return (
    <DropdownMenu triggerContent={<button>打开菜单</button>}>
      <MenuItem onClick={() => console.log('操作1')}>操作 1</MenuItem>
      <MenuItem onClick={() => console.log('操作2')}>操作 2</MenuItem>
      <MenuDivider />
      <MenuItem onClick={() => console.log('操作3')}>操作 3</MenuItem>
    </DropdownMenu>
  )
}

受控模式 ​

tsx
import { useState } from 'react'
import { DropdownMenu, MenuItem } from '@airo-ui/react'

function Demo() {
  const [open, setOpen] = useState(false)

  return (
    <DropdownMenu
      open={open}
      onOpenChange={setOpen}
      triggerContent={<button>{open ? '已打开' : '点击打开'}</button>}
    >
      <MenuItem onClick={() => { setOpen(false); console.log('操作1') }}>
        操作 1
      </MenuItem>
    </DropdownMenu>
  )
}

触发方式 ​

tsx
import { DropdownMenu, MenuItem } from '@airo-ui/react'

function Demo() {
  return (
    <>
      <DropdownMenu trigger="click" triggerContent={<button>点击</button>}>
        <MenuItem>点击触发</MenuItem>
      </DropdownMenu>
      <DropdownMenu trigger="hover" triggerContent={<button>悬停</button>}>
        <MenuItem>悬停触发</MenuItem>
      </DropdownMenu>
      <DropdownMenu trigger="contextmenu" triggerContent={<button>右键</button>}>
        <MenuItem>右键触发</MenuItem>
      </DropdownMenu>
    </>
  )
}

弹出位置 ​

tsx
import { DropdownMenu, MenuItem } from '@airo-ui/react'

function Demo() {
  return (
    <>
      <DropdownMenu placement="bottom-start" triggerContent={<button>左下</button>}>
        <MenuItem>选项 1</MenuItem>
      </DropdownMenu>
      <DropdownMenu placement="bottom-end" triggerContent={<button>右下</button>}>
        <MenuItem>选项 1</MenuItem>
      </DropdownMenu>
      <DropdownMenu placement="top-start" triggerContent={<button>左上</button>}>
        <MenuItem>选项 1</MenuItem>
      </DropdownMenu>
    </>
  )
}

危险操作 ​

tsx
import { DropdownMenu, MenuItem, MenuDivider } from '@airo-ui/react'

function Demo() {
  return (
    <DropdownMenu triggerContent={<button>操作</button>}>
      <MenuItem>编辑</MenuItem>
      <MenuItem>复制</MenuItem>
      <MenuDivider />
      <MenuItem danger onClick={() => console.log('删除')}>
        删除
      </MenuItem>
    </DropdownMenu>
  )
}

分组 ​

tsx
import { DropdownMenu, MenuItem, MenuGroup } from '@airo-ui/react'

function Demo() {
  return (
    <DropdownMenu triggerContent={<button>文件</button>}>
      <MenuGroup label="编辑">
        <MenuItem>剪切</MenuItem>
        <MenuItem>复制</MenuItem>
      </MenuGroup>
      <MenuGroup label="视图">
        <MenuItem>放大</MenuItem>
        <MenuItem>缩小</MenuItem>
      </MenuGroup>
    </DropdownMenu>
  )
}

禁用项 ​

tsx
import { DropdownMenu, MenuItem } from '@airo-ui/react'

function Demo() {
  return (
    <DropdownMenu triggerContent={<button>操作</button>}>
      <MenuItem onClick={() => console.log('ok')}>可用项</MenuItem>
      <MenuItem disabled>禁用项</MenuItem>
    </DropdownMenu>
  )
}

API ​

名称类型默认值说明
openboolean—受控模式是否打开
onOpenChange(open: boolean) => void—打开状态变化时触发
trigger'click' | 'contextmenu' | 'hover''click'触发方式
placement'bottom-start' | 'bottom' | 'bottom-end' | 'top-start' | 'top' | 'top-end''bottom-start'弹出位置
disabledbooleanfalse是否禁用
autoClosebooleantrue点击菜单项后是否自动关闭
triggerContentReactNode—触发元素的内容
childrenReactNode—菜单项子元素
onOpen() => void—打开时触发
onClose() => void—关闭时触发
名称类型默认值说明
labelstring—菜单项文本
disabledbooleanfalse是否禁用
dangerbooleanfalse是否为危险操作
iconstring—图标
acceleratorstring—快捷键提示
childrenReactNode—菜单项内容
onClick(e: MouseEvent) => void—点击时触发
名称类型默认值说明
labelstring—分组标题
childrenReactNode—分组内容

菜单分割线组件,无 Props。

MIT License