リストボックス

リストボックスは、オプションのリストを表示し、ユーザーがそれらの1つ以上を選択できるようにします。


インストール

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

インポート

NextUI は、リストボックス関連の3つのコンポーネントをエクスポートします。

  • Listbox: メインのコンポーネントで、他のコンポーネントのラッパーです。
  • ListboxSection: リストボックスアイテムのグループを含むコンポーネントです。
  • ListboxItem: リストボックスアイテムを表すコンポーネントです。

使い方

動的なアイテム

リストボックスは、Collection Components APIに従い、静的コレクションと動的コレクションの両方を受け入れます。

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

無効なキー

リストボックスアイテムは、disabledKeys プロパティを Listbox コンポーネントに渡すことで無効にできます。

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

バリアント

Listbox コンポーネントで variant を使用して、リストボックスアイテムの hover スタイルを変更できます。

単一選択

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

複数選択

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

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

アイコン付き

リストボックスアイテムにアイコンを追加するには、startContent / endContent プロパティを使用できます。

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

説明付き

description プロパティを使用して、リストボックスアイテムに説明を追加できます。

上部と下部のコンテンツ付き

topContent および bottomContent プロパティを使用して、リストボックスアイテムの上と下に追加のコンテンツを追加できます。

セクション付き

ListboxSection コンポーネントを使用して、リストボックスアイテムをグループ化できます。

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

ルーティング

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

import {Listbox, ListboxItem} from "@nextui-org/react";
function App() {
return (
<Listbox>
<ListboxItem key="home" href="/home">
Home
</ListboxItem>
<ListboxItem key="about" href="/about">
About
</ListboxItem>
</Listbox>
);
}

スロット

Listboxには、基本となる ListboxListboxItem、および ListboxSection の3つのコンポーネントにスロットがあります。

Listbox

  • base: listboxコンポーネントのメインラッパーです。このスロットは、topContentbottomContent、および list スロットをラップします。
  • list: listboxコンポーネント用のスロットです。このスロットは ul スロットとして見ることができます。
  • emptyContent: コレクションが空の場合に表示するスロットコンテンツです。

ListboxItem

  • base: listboxアイテムのメインスロットです。他のすべてのスロットをラップします。
  • wrapper: titledescription のラッパーです。
  • title: listboxアイテムのタイトルです。
  • description: listboxアイテムの説明です。
  • selectedIcon: 選択されたアイコンのスロットです。これは、アイテムが選択されている場合にのみ表示されます。

ListboxSection

  • base: listboxセクションのメインスロットです。他のすべてのスロットをラップします。
  • heading: セクショングループの上にレンダリングされるタイトルです。
  • group: listboxアイテムのグループです。
  • divider: グループ間にレンダリングされる区切り線です。これは、showDividertrue の場合にのみ表示されます。

Listboxのカスタマイズ

Listbox アイテムのスタイルは、itemClasses プロパティを使用し、カスタムのTailwind CSSクラスを渡すことでカスタマイズできます。

注意: 上記の例では、Boxicons アイコンコレクションを使用しています。

キーボード操作

キー説明
Home最初の項目にフォーカスを移動します。
End最後の項目にフォーカスを移動します。
ArrowDown項目にフォーカスがある場合、次の項目にフォーカスを移動します。
ArrowUp項目にフォーカスがある場合、前の項目にフォーカスを移動します。
Enter または Space項目にフォーカスがある場合、その項目を選択します。
A-Z または a-z入力された文字で始まるラベルを持つ次のメニュー項目が存在する場合、そのメニュー項目にフォーカスを移動します。

データ属性

ListboxItem は、base 要素に以下の属性を持ちます。

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

アクセシビリティ

  • ARIA を使用して、支援技術に listbox として公開されます。
  • 単一、複数、または選択なしをサポートします。
  • 無効な項目をサポートします。
  • セクションをサポートします。
  • アクセシビリティのためのラベル付けをサポートします。
  • マウス、タッチ、キーボード操作をサポートします。
  • タブストップのフォーカスマネジメント。
  • 矢印キー、Home/End、Page Up/Down、全選択、クリアなどのキーボードナビゲーションをサポートします。
  • キーボードナビゲーション中の自動スクロールをサポートします。
  • テキストを入力してオプションにフォーカスできるようにするタイプアヘッド。

API

リストボックスのプロパティ

属性説明デフォルト
children*ReactNode[]レンダリングする子要素。通常、ListboxItem または ListboxSection のリスト。-
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
shouldHighlightOnFocusbooleanフォーカスされた項目をハイライト表示するかどうか。ホバー時と同じスタイルが項目に適用されます。false
autoFocusboolean | first | lastフォーカスを設定する場所。false
topContentReactNodeリストボックス項目の上に表示するコンテンツ。-
bottomContentReactNodeリストボックス項目の下に表示するコンテンツ。-
emptyContentReactNodeコレクションが空の場合に表示するコンテンツ。項目がありません。
shouldFocusWrapbooleanキーボードナビゲーションが循環するかどうか。false
hideEmptyContentbooleanコレクションが空の場合に空のコンテンツを表示しないかどうか。false
hideSelectedIconboolean項目が選択されている場合にチェックアイコンを非表示にするかどうか。false
disableAnimationbooleanリストボックス項目のアニメーションを無効にするかどうか。false
classNamesRecord<"base"| "list"| "emptyContent", string>リストボックススロットのカスタムクラス名を設定できます。-
itemClassesRecord<"base"| "wrapper"| "title"| "description"| "selectedIcon", string>リストボックス項目のスロットのカスタムクラス名を設定できます。-

リストボックスのイベント

属性説明
onAction(key: React.Key) => void項目が選択されたときに呼び出されるハンドラー。
onSelectionChange(keys: React.Key[]) => void選択が変更されたときに呼び出されるハンドラー。

ListboxSection のプロパティ

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

ListboxItem Props

属性説明デフォルト
children*ReactNodeリストボックスアイテムの内容。-
keyReact.Keyリストボックスアイテムの一意のキー。-
titlestring | ReactNodeリストボックスアイテムのタイトル。-
textValuestringタイプアヘッドなどの機能に使用される、アイテムの内容の文字列表現。-
descriptionstring | ReactNodeリストボックスアイテムの説明。-
shortcutstring | ReactNodeリストボックスアイテムのキーボードショートカット。-
startContentReactNodeリストボックスアイテムの先頭コンテンツ。-
endContentReactNodeリストボックスアイテムの末尾コンテンツ。ショートカットと選択されたアイコンの後に配置されます。-
selectedIconSelectedIconPropsアイテムが選択されたときにレンダリングするカスタムアイコン。-
hrefstringリンク先のURL。MDNを参照してください。-
targetHTMLAttributeAnchorTargetリンクのターゲットウィンドウ。MDNを参照してください。-
relstringリンクされたリソースと現在のページの関係。MDNを参照してください。-
downloadboolean | stringリンクされたURLをブラウザにダウンロードさせます。ファイル名を提案するために文字列を指定できます。MDNを参照してください。-
pingstringリンクをたどるときにpingを送信するURLのスペース区切りリスト。MDNを参照してください。-
referrerPolicyHTMLAttributeReferrerPolicyリンクをたどるときに送信するリファラーの量。MDNを参照してください。-
shouldHighlightOnFocusbooleanフォーカスされたアイテムをハイライト表示するかどうか。ホバー時と同じスタイルがアイテムに適用されます。false
hideSelectedIconbooleanアイテムが選択されているときにチェックアイコンを非表示にするかどうか。false
showDividerbooleanアイテムの下に区切り線を表示するかどうか。false
isDisabledbooleanリストボックスアイテムを無効にするかどうか。(非推奨)代わりにListboxdisabledKeysを渡してください。false
isSelectedbooleanリストボックスアイテムを選択する必要があるかどうか。(非推奨)代わりにListboxselectedKeysを渡してください。false
isReadOnlybooleanリストボックスアイテムの押下イベントを無視するかどうか。false
classNamesRecord<"base"| "wrapper"| "title"| "description"| "shortcut" | "selectedIcon", string>リストボックス項目のスロットのカスタムクラス名を設定できます。-

ListboxItem Events

属性説明
onAction() => voidリストボックスアイテムが選択されたときに呼び出されるハンドラー。(非推奨)代わりにListboxに渡してください。
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を使用してください。

Types

リストボックスアイテムの選択アイコンプロパティ

export type ListboxItemSelectedIconProps = {
/**
* 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: ListboxItemSelectedIconProps) => ReactNode) | null;