DropdownMenu
displays a menu to the user (such as a set of actions or functions) triggered by a button.
Use a DropdownMenu when you want users to:
- Choose an action or change a setting from a list, AND
- Only see the available choices contextually.
DropdownMenu
is a React component to render an expandable menu of buttons. It is similar in purpose to a <select>
element, with the distinction that it does not maintain a value. Instead, each option behaves as an action button.
If you need to display all the available options at all times, consider using a Toolbar instead. Use a DropdownMenu
to display a list of actions after the user interacts with a button.
Do
Use a DropdownMenu
to display a list of actions after the user interacts with an icon.
Don’t use a DropdownMenu
for important actions that should always be visible. Use a Toolbar
instead.
Don’t
Don’t use a DropdownMenu
for frequently used actions. Use a Toolbar
instead.
Generally, the parent button should indicate that interacting with it will show a DropdownMenu
.
The parent button should retain the same visual styling regardless of whether the DropdownMenu
is displayed or not.
The DropdownMenu
should typically appear directly below, or below and to the left of, the parent button. If there isn’t enough space below to display the full DropdownMenu
, it can be displayed instead above the parent button.
This component is still highly experimental, and it's not normally accessible to consumers of the @wordpress/components
package.
The component exposes a set of components that are meant to be used in combination with each other in order to implement a DropdownMenu
correctly.
The root component, used to specify the menu's trigger and its contents.
The component accepts the following props:
The trigger button
- Required: yes
The contents of the dropdown
- Required: yes
The open state of the dropdown menu when it is initially rendered. Use when you do not need to control its open state.
- Required: no
The controlled open state of the dropdown menu. Must be used in conjunction with onOpenChange
- Required: no
Event handler called when the open state of the dropdown menu changes.
- Required: no
The modality of the dropdown menu. When set to true, interaction with outside elements will be disabled and only menu content will be visible to screen readers.
- Required: no
- Default:
true
The preferred side of the trigger to render against when open. Will be reversed when collisions occur and avoidCollisions is enabled.
- Required: no
- Default:
"bottom"
The distance in pixels from the trigger.
- Required: no
- Default:
0
The preferred alignment against the trigger. May change when collisions occur.
- Required: no
- Default:
"center"
An offset in pixels from the "start" or "end" alignment options.
- Required: no
- Default:
0
Used to render a menu item.
The component accepts the following props:
The contents of the item
- Required: yes
- Required: no
- Default:
false
Event handler called when the user selects an item (via mouse or keyboard). Calling event.preventDefault
in this handler will prevent the dropdown menu from closing when selecting that item.
- Required: no
Optional text used for typeahead purposes. By default the typeahead behavior will use the .textContent
of the item. Use this when the content is complex, or you have non-textual content inside.
- Required: no
The contents of the item's prefix.
- Required: no
The contents of the item's suffix.
- Required: no
Used to render a nested submenu.
The component accepts the following props:
The contents rendered inside the trigger. The trigger should be an instance of the DropdownSubMenuTrigger
component.
- Required: yes
The contents of the dropdown
- Required: yes
The open state of the dropdown menu when it is initially rendered. Use when you do not need to control its open state.
- Required: no
The controlled open state of the dropdown menu. Must be used in conjunction with onOpenChange
- Required: no
Event handler called when the open state of the dropdown menu changes.
- Required: no
When true
, prevents the user from interacting with the item.
- Required: no
Optional text used for typeahead purposes for the trigger. By default the typeahead behavior will use the .textContent
of the trigger. Use this when the content is complex, or you have non-textual content inside.
- Required: no
Used to render a submenu trigger.
The component accepts the following props:
The contents of the item
- Required: yes
The contents of the item's prefix.
- Required: no
The contents of the item's suffix.
- Default: a chevron icon
- Required: The standard chevron icon for a submenu trigger
Used to render a checkbox item.
The component accepts the following props:
The contents of the checkbox item
- Required: yes
The controlled checked state of the item. Must be used in conjunction with onCheckedChange
.
- Required: no
- Default:
false
Event handler called when the checked state changes.
- Required: no
When true
, prevents the user from interacting with the item.
- Required: no
Event handler called when the user selects an item (via mouse or keyboard). Calling event.preventDefault
in this handler will prevent the dropdown menu from closing when selecting that item.
- Required: no
Optional text used for typeahead purposes. By default the typeahead behavior will use the .textContent
of the item. Use this when the content is complex, or you have non-textual content inside.
- Required: no
The contents of the checkbox item's suffix.
- Required: no
Used to render a radio group.
The component accepts the following props:
The contents of the radio group
- Required: yes
The value of the selected item in the group.
- Required: no
Event handler called when the value changes.
- Required: no
Used to render a radio item.
The component accepts the following props:
The contents of the item.
- Required: yes
The unique value of the item.
- Required: yes
When true
, prevents the user from interacting with the item.
- Required: no
Event handler called when the user selects an item (via mouse or keyboard). Calling event.preventDefault
in this handler will prevent the dropdown menu from closing when selecting that item.
- Required: no
Optional text used for typeahead purposes. By default the typeahead behavior will use the .textContent
of the item. Use this when the content is complex, or you have non-textual content inside.
- Required: no
The contents of the radio item's suffix.
- Required: no
Used to render a group label.
The component accepts the following props:
The contents of the group.
- Required: yes
Used to group menu items.
The component accepts the following props:
The contents of the group.
- Required: yes
Used to render a visual separator.