ドロップダウン

ユーザーが選択できるアクションやオプションのリストを表示します。


インストール

npx nextui-cli@latest add dropdown
上記のコマンドは、個別のインストールのみを対象としています。もし、 @nextui-org/react がグローバルにインストールされている場合は、このステップをスキップできます。

インポート

NextUI は、ドロップダウン関連の 5 つのコンポーネントをエクスポートします。

  • Dropdown: メインのコンポーネントで、他のコンポーネントのラッパーです。このコンポーネントは、Popover コンポーネントの拡張であり、Popover コンポーネントのすべての props を受け入れます。
  • DropdownTrigger: ドロップダウンメニューを開くトリガーとなるコンポーネントです。
  • DropdownMenu: ドロップダウンアイテムを含むコンポーネントです。
  • DropdownSection: ドロップダウンアイテムのグループを含むコンポーネントです。
  • DropdownItem: ドロップダウンアイテムを表すコンポーネントです。

使用方法

動的なアイテム

ドロップダウンは、Collection Components APIに従い、静的コレクションと動的コレクションの両方を受け入れます。

  • 静的: 上記の使用例は静的な実装を示しており、オプションの完全なリストが事前にわかっている場合に使用できます。
  • 動的: 次の例は、オプションが API 呼び出しなどの外部データソースから取得される場合や、時間の経過とともに更新される場合に使用できます。

無効なキー

ドロップダウンアイテムは、disabledKeys prop を DropdownMenu コンポーネントに渡すことで無効にできます。

: 各アイテムに一意のキーを設定することが重要です。そうしないと、無効なキーが機能しません。

アクションイベント

onAction prop を使用すると、選択したアイテムのキーを取得できます。

バリアント

DropdownMenu コンポーネントの variant を使用すると、ドロップダウンアイテムの hover スタイルを変更できます。

単一選択

ユーザーが一度に1つのアイテムのみを選択できるようにするには、selectionMode プロパティを single に設定します。

複数選択

ユーザーが一度に複数のアイテムを選択できるようにするには、selectionMode プロパティを multiple に設定します。

注意: 空の選択を許可するには、disallowEmptySelection プロパティを false に設定します。

ショートカット付き

ドロップダウン項目にショートカットを追加するには、shortcut プロパティを使用できます。

注意: ドロップダウンはショートカットイベントを処理しません。自分で処理する必要があります。

アイコン付き

startContent / endContent プロパティを使用して、ドロップダウン項目にアイコンを追加できます。

注意: アイコンの色として currentColor を使用すると、アイコンは項目テキストと同じ色になります。

説明付き

ドロップダウン項目に説明を追加するには、description プロパティを使用できます。

セクション付き

ドロップダウン項目をグループ化するには、DropdownSection コンポーネントを使用できます。

注意: title のないセクションは、アクセシビリティのために aria-label を提供する必要があります。

カスタムトリガー

ドロップダウンメニューのトリガーとして任意のコンポーネントを使用できます。それらを DropdownTrigger コンポーネントでラップするだけです。

背景の変更

前述したように、Dropdown コンポーネントは Popover コンポーネントの拡張であるため、backdrop プロパティを含む、Popover コンポーネントのすべてのプロパティを受け入れます。

ルーティング

<DropdownItem> コンポーネントは、Next.jsReact Router のようなフレームワークやクライアントサイドルーターで動作します。設定方法については、ルーティングガイドを参照してください。

import {Dropdown, DropdownMenu, DropdownTrigger, DropdownItem, Button} from "@nextui-org/react";
function App() {
return (
<Dropdown>
<DropdownTrigger>
<Button variant="bordered">Open Menu</Button>
</DropdownTrigger>
<DropdownMenu aria-label="Link Actions">
<DropdownItem key="home" href="/home">
Home
</DropdownItem>
<DropdownItem key="about" href="/about">
About
</DropdownItem>
</DropdownMenu>
</Dropdown>
);
}

スロット

ドロップダウンには、DropdownMenu, DropdownItem, DropdownSection の3つのコンポーネントにスロットがあります。

  • base: メニューコンポーネントのメインラッパー。topContentbottomContent、および list スロットをラップします。
  • list: メニューリストコンポーネントのスロット。このスロットは ul スロットと見なすことができます。
  • emptyContent: コレクションが空の場合に表示するスロットコンテンツ。
  • base: ドロップダウンアイテムのメインスロット。他のすべてのスロットをラップします。
  • wrapper: title および description のラッパー。
  • title: ドロップダウンアイテムのタイトル。
  • description: ドロップダウンアイテムの説明。
  • shortcut: ショートカットスロット。
  • selectedIcon: 選択されたアイコンスロット。アイテムが選択されている場合にのみ表示されます。
  • base: ドロップダウンセクションのメインスロット。他のすべてのスロットをラップします。
  • heading: セクショングループの上にレンダリングされるタイトル。
  • group: ドロップダウンアイテムのグループ。
  • divider: グループ間にレンダリングされる区切り線。これは、showDividertrue の場合にのみ表示されます。

ドロップダウンポップオーバーのカスタマイズ

Dropdown コンポーネントは、Popover コンポーネントの拡張であるため、同じスロットを使用してドロップダウンをカスタマイズできます。

ドロップダウンアイテムのスタイルのカスタマイズ

DropdownMenuitemClasses プロパティを使用するか、DropdownItem スロットを使用するかで、ドロップダウンアイテムをカスタマイズできます。itemClasses を使用すると、すべてのアイテムを一度にカスタマイズできますが、スロットを使用すると、各アイテムを個別にカスタマイズできます。

キーボード操作

キー説明
Spaceフォーカスが DropdownTrigger にある場合、ドロップダウンメニューを開き、最初のアイテムにフォーカスします。フォーカスがアイテムにある場合、フォーカスされたアイテムをアクティブにします。
Enterフォーカスが DropdownTrigger にある場合、ドロップダウンメニューを開き、最初のアイテムにフォーカスします。フォーカスがアイテムにある場合、フォーカスされたアイテムをアクティブにします。
ArrowDownフォーカスが DropdownTrigger にある場合、ドロップダウンメニューを開きます。フォーカスがアイテムにある場合、フォーカスを次のアイテムに移動します。
ArrowUpフォーカスがアイテムにある場合、フォーカスを前のアイテムに移動します。
Escドロップダウンメニューを閉じ、フォーカスを DropdownTrigger に移動します。
A-Z または a-zメニューが開いている場合、入力された文字で始まるラベルを持つ次のメニューアイテムが存在する場合は、そのメニューアイテムにフォーカスを移動します。

データ属性

DropdownItembase 要素には、次の属性があります。

  • data-disabled: ドロップダウンアイテムが無効になっている場合。ドロップダウンの disabledKeys プロパティに基づきます。
  • data-selected: ドロップダウンアイテムが選択されている場合。ドロップダウンの selectedKeys プロパティに基づきます。
  • data-hover: ドロップダウンアイテムがホバーされている場合。useHoverに基づきます。
  • data-pressed: ドロップダウンアイテムが押されている場合。usePressに基づきます。
  • data-focus: ドロップダウンアイテムがフォーカスされている場合。useFocusRingに基づきます。
  • data-focus-visible: ドロップダウン項目がキーボードでフォーカスされている場合。 useFocusRing に基づきます。

アクセシビリティ

  • 支援技術に対して、ARIA を使用した buttonmenu として公開されます。
  • 単一、複数、または選択なしのサポート。
  • 無効化された項目のサポート。
  • セクションのサポート。
  • アクセシビリティのための複雑な項目ラベルのサポート。
  • 矢印キー、Home/End、Page Up/Down を含むキーボードナビゲーションのサポート。詳細については、キーボード操作を参照してください。
  • キーボードナビゲーション中の自動スクロールのサポート。
  • 矢印キーを使用してメニューを開くためのキーボードサポート(最初の項目または最後の項目に自動的にフォーカスを含む)。
  • テキストを入力して項目にフォーカスできるようにするタイプアヘッド。
  • 長いリストでのパフォーマンスのための仮想化スクロールのサポート。

API

属性説明デフォルト
children*ReactNode[]レンダリングする子要素。通常は DropdownTrigger 要素と DropdownMenu 要素です。-
typemenu | listboxドロップダウントリガーによって開かれるオーバーレイのタイプ。menu
triggerpress | longPressドロップダウンメニューがトリガーされる方法。press
isDisabledbooleanドロップダウントリガーが無効かどうか。false
closeOnSelectboolean項目が選択されたときにドロップダウンメニューを閉じるかどうか。true
shouldBlockScrollbooleanドロップダウンメニューがメニュー外のスクロールをブロックする必要があるかどうか。true
PopoverPropsPopoverPropsドロップダウンはポップオーバーの拡張であるため、ポップオーバーコンポーネントのすべてのプロパティを受け入れます。-
属性説明
onOpenChange(isOpen: boolean) => voidドロップダウンのオープン状態が変更されたときに呼び出されるハンドラー。
shouldCloseOnInteractOutside(e: HTMLElement) => voidユーザーがドロップダウン ref の外部の引数要素とやり取りするときに、onClose を呼び出す必要がある場合は true を返します。
onClose() => voidドロップダウンを閉じる必要があるときに呼び出されるハンドラー。

属性説明デフォルト
childrenReactNodeドロップダウントリガーコンポーネント。渡された children がフォーカス可能であることを確認してください。ユーザーはキーボードを使用してタブで移動でき、ref を受け取ることができます。これはアクセシビリティにとって重要です。-

属性説明
children*ReactNode | ((item: T) => ReactElement)コレクションの内容。通常は DropdownItem または DropdownSection です。(静的)-
itemsIterable<T>コレクション内の項目オブジェクト。(動的)-
variantsolid | bordered | light | flat | faded | shadowドロップダウン項目の外観スタイル。solid
colordefault | primary | secondary | success | warning | dangerドロップダウン項目のカラーテーマ。default
selectionModenone | single | multipleコレクションで許可される選択のタイプ。-
selectedKeysReact.Key[]コレクション内で現在選択されているキー(制御あり)。-
disabledKeysReact.Key[]無効になっているアイテムのキー。これらのアイテムは選択、フォーカス、またはその他の操作を行うことができません。-
defaultSelectedKeysall | React.Key[]コレクション内で最初に選択されているキー(制御なし)。-
disallowEmptySelectionbooleanコレクションで空の選択を許可するかどうか。false
autoFocusboolean | first | lastフォーカスを設定する場所。false
topContentReactNodeリストボックスアイテムの上に表示するコンテンツ。-
bottomContentReactNodeリストボックスアイテムの下に表示するコンテンツ。-
emptyContentReactNodeコレクションが空の場合に表示するコンテンツ。アイテムはありません。
hideEmptyContentbooleanコレクションが空の場合に空のコンテンツを表示しないかどうか。false
hideSelectedIconbooleanアイテムが選択されているときにチェックアイコンを非表示にするかどうか。false
shouldFocusWrapbooleanキーボードナビゲーションが循環するかどうか。false
closeOnSelectboolean項目が選択されたときにドロップダウンメニューを閉じるかどうか。true
disableAnimationbooleanドロップダウンアイテムのアニメーションを無効にするかどうか。false
classNamesRecord<"base"| "list"| "emptyContent", string>ドロップダウンメニューのスロットにカスタムクラス名をを設定できます。-
itemClassesRecord<"base"| "wrapper"| "title"| "description"| "shortcut" | "selectedIcon", string>ドロップダウンアイテムのスロットにカスタムクラス名をを設定できます。-
属性説明
onAction(key: React.Key) => voidアイテムが選択されたときに呼び出されるハンドラー。
onSelectionChange(keys: React.Key[]) => void選択が変更されたときに呼び出されるハンドラー。
onClose() => voidアイテムを選択した後、メニューを閉じる必要がある場合に呼び出されるハンドラー。

属性説明デフォルト
children*ReactNodeドロップダウンセクションの内容。通常、DropdownItem コンポーネントのリスト。(静的)-
titlestringドロップダウンセクションのタイトル。-
itemsIterable<T>コレクション内の項目オブジェクト。(動的)-
hideSelectedIconbooleanアイテムが選択されているときにチェックアイコンを非表示にするかどうか。false
showDividerbooleanグループ間に区切り線を表示するかどうか。false
dividerPropsDividerProps区切り線コンポーネントのプロパティ。-
classNamesRecord<"base"| "heading"| "group"| "divider", string>ドロップダウンセクションのスロットにカスタムクラス名をを設定できます。-
itemClassesRecord<"base"| "wrapper"| "title"| "description"| "shortcut" | "selectedIcon", string>ドロップダウンアイテムのスロットにカスタムクラス名をを設定できます。-

属性説明デフォルト
children*ReactNodeドロップダウンアイテムの内容。-
keyReact.Keyドロップダウンアイテムの一意のキー。-
titlestring | ReactNodeドロップダウンアイテムのタイトル。-
textValuestringアイテムの内容の文字列表現。タイプアヘッドなどの機能に使用されます。-
descriptionstring | ReactNodeドロップダウンアイテムの説明。-
shortcutstring | ReactNodeドロップダウンアイテムのキーボードショートカット。-
startContentReactNodeドロップダウンアイテムの開始コンテンツ。-
endContentReactNodeドロップダウンアイテムの終了コンテンツ。これは、ショートカットと選択されたアイコンの後に配置されます。-
selectedIconSelectedIconPropsアイテムが選択されたときにレンダリングするカスタムアイコン。-
showDividerbooleanアイテムの下に区切り線を表示するかどうか。false
hrefstringリンク先のURL。MDNを参照してください。-
targetHTMLAttributeAnchorTargetリンクのターゲットウィンドウ。MDNを参照してください。-
relstringリンクされたリソースと現在のページの関係。MDNを参照してください。-
downloadboolean | stringブラウザーにリンクされたURLをダウンロードさせます。ファイル名を提案するために文字列を指定できます。MDNを参照してください。-
pingstringリンクをたどるときにpingするURLをスペースで区切ったリスト。MDNを参照してください。-
referrerPolicyHTMLAttributeReferrerPolicyリンクをたどるときに送信するリファラーの量。MDNを参照してください。-
isDisabledbooleanドロップダウンアイテムを無効にするかどうか。(非推奨)代わりにDropdownMenudisabledKeysを渡してください。false
isSelectedbooleanドロップダウンアイテムを選択する必要があるかどうか。(非推奨)代わりにDropdownMenuselectedKeysを渡してください。false
isReadOnlybooleanドロップダウンアイテムのプレスイベントを無視するかどうか。false
hideSelectedIconbooleanアイテムが選択されたときにチェックアイコンを非表示にするかどうか。false
closeOnSelectbooleanアイテムが選択されたときにドロップダウンメニューを閉じる必要があるかどうか。true
classNamesRecord<"base"| "wrapper"| "title"| "description"| "shortcut" | "selectedIcon", string>ドロップダウンアイテムのスロットにカスタムクラス名をを設定できます。-
属性説明
onAction() => voidドロップダウンアイテムが選択されたときに呼び出されるハンドラー。(非推奨)代わりにDropdownMenuに渡してください。
onClose() => voidドロップダウンアイテムを選択後に閉じる必要がある場合に呼び出されるハンドラー。(非推奨)代わりにDropdownMenuに渡してください。
onPress(e: PressEvent) => voidターゲット上でプレスがリリースされたときに呼び出されるハンドラー。
onPressStart(e: PressEvent) => voidプレスインタラクションが開始されたときに呼び出されるハンドラー。
onPressEnd(e: PressEvent) => voidプレスインタラクションが終了したときに呼び出されるハンドラー。ターゲット上またはポインターがターゲットから離れたとき。
onPressChange(isPressed: boolean) => voidプレス状態が変化したときに呼び出されるハンドラー。
onPressUp(e: PressEvent) => voidプレスがターゲット上でリリースされたときに呼び出されるハンドラー。ターゲット上で開始されたかどうかは関係ありません。
onKeyDown(e: KeyboardEvent) => voidキーが押されたときに呼び出されるハンドラー。
onKeyUp(e: KeyboardEvent) => voidキーが離されたときに呼び出されるハンドラー。
onClickMouseEventHandlerネイティブのボタンクリックイベントハンドラー(非推奨)代わりにonPressを使用してください。

export type DropdownItemSelectedIconProps = {
/**
* The current icon, usually an checkmark icon.
*/
icon?: ReactNode;
/**
* The current selected status.
*/
isSelected?: boolean;
/**
* The current disabled status.
* @default false
*/
isDisabled?: boolean;
};
type selectedIcon?: ReactNode | ((props: DropdownItemSelectedIconProps) => ReactNode) | null;