インプット
インプットは、ユーザーがテキストを入力できるようにするコンポーネントです。フォーム、検索フィールドなどでユーザー入力を取得するために使用できます。
インストール
npx nextui-cli@latest add input
上記のコマンドは、個別インストール専用です。もし、 @nextui-org/react がグローバルにインストールされている場合は、このステップを省略できます。
インポート
使用法
無効
読み取り専用
必須
インプットにisRequiredプロパティを渡すと、ラベルの最後にdangerアスタリスクが表示され、インプットが必須になります。
サイズ
色
バリアント
半径
ラベル配置
labelPlacementプロパティをinside、outside、またはoutside-leftに設定することで、ラベルの位置を変更できます。
注:
labelが渡されない場合、labelPlacementプロパティはデフォルトでoutsideになります。
パスワード入力
typeプロパティを使用して、インプットタイプをpasswordに変更できます。
クリアボタン
インプットにisClearableプロパティを渡すと、インプットの最後にクリアボタンが表示され、インプットに値がある場合に表示されます。
開始&終了コンテンツ
startContentプロパティとendContentプロパティを使用して、インプットの開始と終了にコンテンツを追加できます。
説明付き
descriptionプロパティを渡すことで、インプットに説明を追加できます。
エラーメッセージ付き
isInvalidプロパティとerrorMessageプロパティを組み合わせることで、無効なインプットを表示できます。errorMessageは、isInvalidがtrueに設定されている場合にのみ表示されます。
例:regex を使用したメールアドレスの検証
制御された入力
value プロパティと onValueChange プロパティを使用して、入力値を制御できます。
注意: NextUI
Inputは、onChangeのようなネイティブイベントもサポートしており、Formik や React Hook Form のようなフォームライブラリで役立ちます。
スロット
- base: 入力ラッパー。配置、位置、および全体的な外観を処理します。
- label: 入力のラベル。入力の上、内側、または左側に表示されます。
- mainWrapper: 位置が
outside/outside-leftの場合にinputWrapperをラップします。 - inputWrapper:
label(内側にある場合) とinnerWrapperをラップします。 - innerWrapper:
input,startContent, およびendContentをラップします。 - input: 入力要素。
- clearButton: 入力の末尾にあるクリアボタン。
- helperWrapper:
descriptionとerrorMessageをラップします。 - description: 入力の説明。
- errorMessage: 入力のエラーメッセージ。
カスタムスタイル
カスタムの Tailwind CSS クラスをコンポーネントのスロットに渡すことで、Input コンポーネントをカスタマイズできます。
カスタム実装
入力をさらにカスタマイズする必要がある場合は、useInput フックを使用して独自の実装を作成できます。
データ属性
Input の base 要素には、次の属性があります。
- data-invalid: 入力が無効な場合。
isInvalidプロパティに基づきます。 - data-required: 入力が必須の場合。
isRequiredプロパティに基づきます。 - data-readonly: 入力が読み取り専用の場合。
isReadOnlyプロパティに基づきます。 - data-hover: 入力がホバーされている場合。useHover に基づきます。
- data-focus: 入力がフォーカスされている場合。useFocusRing に基づきます。
- data-focus-within: 入力またはその子要素のいずれかがフォーカスされている場合。useFocusWithin に基づきます。
- data-focus-visible: キーボードで入力がフォーカスされている場合。useFocusRing に基づきます。
- data-disabled: 入力が無効になっている場合。
isDisabledプロパティに基づきます。
アクセシビリティ
- ネイティブの
<input>要素で構築されています。 - 視覚的なラベル付けと ARIA ラベル付けをサポートします。
- change、clipboard、composition、selection、input イベントをサポートします。
- 必須および無効な状態を ARIA を介して支援技術に公開します。
- ARIA を介して入力にリンクされた説明とエラーメッセージのヘルプテキストをサポートします。
API
Input Props
| 属性 | 型 | 説明 | デフォルト |
|---|---|---|---|
| children | ReactNode | 入力の内容。 | - |
| variant | flat | bordered | faded | underlined | 入力のバリアント。 | flat |
| color | default | primary | secondary | success | warning | danger | 入力の色。 | default |
| size | sm | md | lg | 入力のサイズ。 | md |
| radius | none | sm | md | lg | full | 入力の半径。 | - |
| label | ReactNode | ラベルとして表示するコンテンツ。 | - |
| value | string | 入力の現在の値(制御されたコンポーネント)。 | - |
| defaultValue | string | 入力のデフォルト値(非制御コンポーネント)。 | - |
| placeholder | string | 入力のプレースホルダー。 | - |
| description | ReactNode | 入力の説明。選択すべき内容の具体的な要件などのヒントを提供します。 | - |
| errorMessage | ReactNode | ((v: ValidationResult) => ReactNode) | 入力のエラーメッセージ。isInvalid が true に設定されている場合にのみ表示されます。 | - |
| validate | (value: string) => ValidationError | true | null | undefined | コミット時(例:blur時)に入力値を検証し、無効な値に対してエラーメッセージを返します。validationBehavior が native に設定されている場合、検証エラーはフォーム送信時に表示されます。リアルタイム検証には、isInvalid プロパティを使用してください。 | - |
| validationBehavior | native | aria | 値が欠落しているか無効な場合にフォーム送信を防ぐためにネイティブHTMLフォーム検証を使用するか、ARIAを介してフィールドを必須または無効としてマークするかどうか。 | aria |
| startContent | ReactNode | 入力の左側にレンダリングされる要素。 | - |
| endContent | ReactNode | 入力の右側にレンダリングされる要素。 | - |
| labelPlacement | inside | outside | outside-left | ラベルの位置。 | inside |
| fullWidth | boolean | 入力が親の幅を占有するかどうか。 | true |
| isClearable | boolean | 入力にクリアボタンが必要かどうか。 | false |
| isRequired | boolean | フォーム送信前に、入力でユーザー入力が必要かどうか。 | false |
| isReadOnly | boolean | 入力が選択可能であるが、ユーザーによって変更できないかどうか。 | |
| isDisabled | boolean | 入力が無効になっているかどうか。 | false |
| isInvalid | boolean | 入力が無効かどうか。 | false |
| baseRef | RefObject<HTMLDivElement> | ベース要素へのref。 | - |
| validationState | valid | invalid | 入力が「有効」または「無効」の視覚的なスタイルを表示するかどうか。(非推奨)代わりにisInvalidを使用してください。 | - |
| disableAnimation | boolean | 入力にアニメーションを適用するかどうか。 | false |
| classNames | Record<"base"| "label"| "inputWrapper"| "innerWrapper"| "mainWrapper" | "input" | "clearButton" | "helperWrapper" | "description" | "errorMessage", string> | Inputのスロットにカスタムクラス名を設定できます。 | - |
Input Events
| 属性 | 型 | 説明 |
|---|---|---|
| onChange | React.ChangeEvent<HTMLInputElement> | 要素の値が変更されたときに呼び出されるハンドラー。event.target.value (string)にアクセスして新しい値を取得できます。 |
| onValueChange | (value: string) => void | 要素の値が変更されたときに呼び出されるハンドラー。 |
| onClear | () => void | クリアボタンがクリックされたときに呼び出されるハンドラー。 |

