---
title: Dropdown - 下拉菜单
order: 6
path: /dropdown
nav:
  order: 1
  title: 桌面组件
  path: /design
group:
  order: 5
  title: 导航
  path: /nav
---

用于承载过多的操作集合，通过下拉拓展的形式，收纳更多的操作。

## 文字下拉菜单

文字按钮触发下拉菜单。常用于空间极度受限的收纳操作场景，一般用于表格内详情操作的收纳。

<code src='./demos/text.tsx'  height='400px'>

## 按钮下拉菜单

普通按钮触发下拉菜单。常用于操作收纳场景。

<code src='./demos/button.tsx'  height='400px'>

## 带分割线下拉菜单

通过分割线区分不同的下拉菜单操作。常用于需要区分不同操作结果的场景。

<code src='./demos/divider.tsx'  height='400px'>

## 多层下拉菜单

通过分割线区分不同的下拉菜单操作。常用于需要区分不同操作结果的场景。

<code src='./demos/multiple.tsx'  height='400px'>

## 带禁用操作项的下拉菜单

下拉菜单的操作项可以设置禁用。常用于禁用部分操作项的场景。

<code src='./demos/disabled.tsx'  height='400px'>

## 不同触发方式的下拉菜单

默认是移入触发菜单，可以设置点击触发。

<code src='./demos/trigger.tsx'  height='400px'>

## API

| 参数               | 说明                                                                                               | 类型                                               | 默认值              | 版本   |
| ------------------ | -------------------------------------------------------------------------------------------------- | -------------------------------------------------- | ------------------- | ------ |
| arrow              | 下拉框箭头是否显示                                                                                 | boolean                                            | false               |        |
| autoFocus          | 打开后自动聚焦下拉框                                                                               | boolean                                            | false               | 4.21.0 |
| disabled           | 菜单是否禁用                                                                                       | boolean                                            | -                   |        |
| destroyPopupOnHide | 关闭后是否销毁 Dropdown                                                                            | boolean                                            | false               |        |
| getPopupContainer  | 菜单渲染父节点。默认渲染到 body 上，如果你遇到菜单滚动定位问题，试试修改为滚动的区域，并相对其定位 | (triggerNode: HTMLElement) => HTMLElement          | () => document.body |        |
| overlay            | 菜单                                                                                               | Menu                                               | () => Menu          |        |
| overlayClassName   | 下拉根元素的类名称                                                                                 | string                                             | -                   |        |
| overlayStyle       | 下拉根元素的样式                                                                                   | CSSProperties                                      | -                   |        |
| placement          | 菜单弹出位置：`bottom`,`bottomLeft`, `bottomRight`, `top`, `topLeft`, `topRight`                   | string                                             | bottomLeft          |        |
| trigger            | 触发下拉的行为, 移动端不支持 hover                                                                 | Array<click \| hover \| contextMenu> \| ['hover']> | -                   |
| visible            | 菜单是否显示                                                                                       | boolean                                            | -                   |        |
| onVisibleChange    | 菜单显示状态改变时调用，参数为 `visible`。点击菜单按钮导致的消失不会触发                           | (visible: boolean) => void                         | -                   |        |

`overlay` 菜单使用 Menu，还包括菜单项 `Menu.Item`，分割线 `Menu.Divider`。

> 注意： Menu.Item 必须设置唯一的 key 属性。
> Dropdown 下的 Menu 默认不可选中。如果需要菜单可选中，可以指定 `<Menu selectable>`。

## Dropdown.Button

| 参数            | 说明                                                                             | 类型                                               | 默认值     | 版本 |
| --------------- | -------------------------------------------------------------------------------- | -------------------------------------------------- | ---------- | ---- |
| buttonsRender   | 自定义左右两个按钮                                                               | (buttons: ReactNode[]) => ReactNode[]              | -          |      |
| loading         | 设置按钮载入状态                                                                 | boolean \| { delay: number }                       | false      |      |
| disabled        | 菜单是否禁用                                                                     | boolean                                            | false      |      |
| icon            | 右侧 icon                                                                        | ReactNode                                          | -          |      |
| overlay         | 菜单                                                                             | Menu                                               | () => Menu |      |
| placement       | 菜单弹出位置：`bottom`,`bottomLeft`, `bottomRight`, `top`, `topLeft`, `topRight` | string                                             | bottomLeft |      |
| size            | 按钮大小，和 Button 一样                                                         | string                                             | `default`  |      |
| type            | 按钮 type，和 Button 一样                                                        | string                                             | `default`  |      |
| trigger         | 触发下拉的行为, 移动端不支持 hover                                               | Array<click \| hover \| contextMenu> \| ['hover']> | -          |
| visible         | 菜单是否显示                                                                     | boolean                                            | -          |      |
| onclick         | 点击左侧按钮的回调，和 Button 一致                                               | (event) => void                                    | -          |      |
| onVisibleChange | 菜单显示状态改变时调用，参数为 `visible`。点击菜单按钮导致的消失不会触发         | (visible: boolean) => void                         | -          |      |

## 注意

`overlay` 传入的菜单，需要加 `isDropdown={true}` 该属性, 下拉菜单的样式才会生效。

```javascript
// 伪代码
const menu = <Menu isDropdown items={[...]} />
<Dropdown overlay={menu} />
```
