kaze風
FormField
フォームフィールド
プレビュー
フルネームを入力してください
正しいメールアドレスを入力してください
45 / 200
使いどころ
使う場面
- Input、Select、Textarea、Combobox、DatePicker に、ラベル・説明・エラー・文字数を付けるとき
- 必須項目は required。ラベルの末尾に * が付き、コントロールに required と aria-required が渡る
- エラーは error に文言を渡す。コントロールに aria-invalid が付き、文言は role="alert" で読まれる
使わない場面
- RadioGroup、NumberField。これらは label と errorMessage を自前で持つので、FormField で二重に包まない
- Checkbox や Switch 単体。ラベルを持つので、補足が要るときだけ使う
- 子に複数のコントロールを渡すこと。children は 1 つの要素だけ。複数並べるなら要素ごとに FormField を使う
- エラー文言のないエラー表示。必ず何が間違いかを書く
使い方
<FormField label="メール" error="入力してください">
<Input />
</FormField>プロパティ
| 名前 | 型 | デフォルト | 説明 |
|---|---|---|---|
label | string | なし | フィールドのラベル |
description | string | なし | フィールドの説明テキスト |
error | string | なし | エラーメッセージ |
required | boolean | false | 必須フィールドかどうか |
maxLength | number | なし | 最大文字数(カウンター表示用) |
currentLength | number | なし | 現在の文字数(カウンター表示用) |
children | ReactElement | なし | フォーム部品(Input、Select、Textarea など)。id と aria 属性が自動で結ばれる |
型と必須かどうかはソースの型定義から自動で生成しています。表にない HTML 標準の属性(className や aria-* など)も、ルート要素にそのまま渡せます。
アクセシビリティ
- label の htmlFor、コントロールの id、aria-describedby を自動で結ぶ。コントロールに id があればそれを使う
- aria-describedby には description、error、カウンターの順で並ぶ。コントロール自身の指定は末尾に残る
- error は role="alert" で、表示された時点で読み上げられる。入力中に毎回エラーを出すと読み上げが多すぎるので、確定時に出す
- maxLength はカウンターだけを出す。入力を止めるには、コントロールにも maxLength を渡す。残り 10 文字以下で aria-live="polite" になる
文言
- label は「メールアドレス」のような名詞。必須は required で示し、文言に「(必須)」と書かない
- description は入力前に読むヒント(書式、上限、使い道)。エラーは入力後に読む修正方法。同じことを繰り返さない
- エラー文言は何が間違いで、どう直すかを書く(「@ を含むメールアドレスを入力してください」)