FormControl

FormControlコンポーネントは、フォームとしての入力要素に対応するラベルとメッセージテキストを表示するためのコンポーネントです。

使用上の注意

入力要素が1つの場合にのみ使用する

FormControlは、入力要素が1つだけの場合にのみ使用できます。

姓名や電話番号のように値を分割して入力する場合や、CheckboxやRadioButtonといった複数の入力要素を持つフォームに対してラベルやメッセージテキストを表示したい場合は、Fieldsetを使用してください。

レイアウト

ステータスラベルやメッセージテキストの有無で、コンポーネント内のレイアウトにバリエーションがあります。

ステータスラベルの有無

フォーム入力が入力必須か任意かをユーザーが区別できるようにするために使用します。 代表的なステータスラベルは次の通りです。

種類表示例説明
必須必須入力必須のフォームの場合に表示します。
任意任意任意のフォームの場合に表示します。

フォーム入力が必須の場合の表示例

フォーム入力が任意の場合の表示例

ステータスラベルの省略

ステータスラベルは視覚的に強い注意を惹くことから、認知負荷を減らすために省略する場合があります。 具体的には、以下のケースには省略を検討してください。

必須を省略するケース
  • フォーム入力が極めて少なく、すべて必須であることが自明な場合
  • 任意のフォームよりも入力必須のフォームが多い場合
ステータスラベル自体を省略するケース
  • フォームの説明文などで、すべての項目が必須、または任意であることが明記されている場合

メッセージテキストの有無

以下の種類別のメッセージテキストを目的に応じて組み合わせて使用できます。

種類Props説明
ヘルプメッセージhelpMessage入力して欲しい内容を具体的に伝えるテキストを入力要素の上に表示します。必要に応じて関連するヘルプページなどへのテキストリンクを設置できます。テキストリンクの詳細はヘルプページへの動線を参照してください。
入力例exampleMessageフォームの入力例を入力要素の上に表示します。原則として入力要素のplaceholderはユーザビリティおよびアクセシビリティの観点から非推奨としているため、その代替として使用してください。
エラーメッセージerrorMessagesフォームバリデーションなどで、適切な値が入力されていないことを伝えるテキストを、エラーメッセージ アイコン(FaExclamationCircle)とあわせて入力要素の上に表示します。
補足メッセージsupplementaryMessage入力時にユーザーが把握しなくても操作に影響のない情報を入力要素の下に表示します。

メッセージテキストの表示例

エラーメッセージ

エラーメッセージは、入力必須の入力要素の値が空の場合や、データ型が異なるなどの適切な値が入力されていない場合に表示します。

どの入力要素がエラーとなっているかを視覚的に見つけやすくするために、入力要素にもerror状態を付加します。

同一画面上でエラーをリアルタイムに判定できる場合は、エラーの原因が解消されたらメッセージの表示を止めます。

初期状態の場合
適切な値が入力されていない場合

状態

無効(disabled)

フォームの操作ができない状態を表現する際は、Inputなど内包する要素のdisabledを使用してください。

ユーザーはなぜ無効になっているのかわからないことがあります。権限による表示制御のデザインパターンを参考にして、そもそも無効ではなくフォーム自体を非表示にしたり、無効状態の理由を付近に表示することを検討してください。

読み取り専用

入力内容の確認時など、すでに入力済みの書き換えできない値として表示する際は、Inputなど内包する要素のreadOnlyを使用してください。

Props

title必須
string number false true ReactElement<any, string | JSXElementConstructor<any>> Iterable<ReactNode> ReactPortal

グループのタイトル名

htmlFor
string

label 要素に適用する htmlFor

titleType
"screenTitle" "sectionTitle" "blockTitle" "subBlockTitle" "subSubBlockTitle"

タイトルの見出しのタイプ

dangerouslyTitleHidden
false true

タイトルの見出しを視覚的に隠すかどうか

labelId
string

label 要素に適用する id

innerMargin
0 0.25 0.5 0.75 1 1.25 1.5 2 2.5 3 3.5 4 8 -0.25 -0.5 -0.75 -1 -1.25 -1.5 -2 -2.5 -3 -3.5 -4 -8 "XXS" "XS" "S" "M" "L" "XL" "XXL" "X3S" "X3L"

タイトル群と子要素の間の間隔調整用(基本的には不要)

statusLabelProps
Props & ElementProps & { children?: ReactNode; } (Props & ElementProps & { children?: ReactNode; })[]

タイトルの隣に表示する StatusLabel の Props の配列

helpMessage
string number false true ReactElement<any, string | JSXElementConstructor<any>> Iterable<ReactNode> ReactPortal

タイトルの下に表示するヘルプメッセージ

exampleMessage
string number false true ReactElement<any, string | JSXElementConstructor<any>> Iterable<ReactNode> ReactPortal

タイトルの下に表示する入力例

errorMessages
string number false true ReactElement<any, string | JSXElementConstructor<any>> Iterable<ReactNode> ReactPortal ReactNode[]

タイトルの下に表示するエラーメッセージ

autoBindErrorInput
false true

エラーがある場合に自動的に入力要素を error にするかどうか

supplementaryMessage
string number false true ReactElement<any, string | JSXElementConstructor<any>> Iterable<ReactNode> ReactPortal

フォームコントロールの下に表示する補足メッセージ