Form
react-hook-formと連携したフォームコンポーネント。
インポート
react-hook-form依存のため、専用エントリポイント /form からインポートします(FormはServer Componentsで使えないためrootからは意図的に除外されています)。
基本的な使い方
バリデーション付き
サブコンポーネント
| コンポーネント | 役割 |
|---|---|
Form | react-hook-formのFormProviderそのもの |
FormField | Controllerのラッパー。nameをcontextで配下に共有する |
useFormField | FormField配下で使う内部フック。id・error・各要素のid(formItemId等)を返す |
FormItem | 1フィールド分のラッパー(React.useId()でid採番) |
FormLabel | ラベル。エラー時にdata-errorが付き赤字になる。htmlForは自動配線される |
FormControl | 実際の入力要素(Input等)をSlot合成し、id・aria-describedby・aria-invalidを自動配線する |
FormDescription | 説明文。idが自動配線されaria-describedbyから参照される |
FormMessage | エラーメッセージ。errorがあればそれを表示し、無ければchildrenを表示。両方無ければ描画されない |
Props (FormField)
| Prop | Type | Default | Description |
|---|---|---|---|
control* | Control | - | react-hook-formのcontrol |
name* | string | - | フィールド名 |
render* | (props) => ReactNode | - | フィールドのレンダリング関数 |
Props (FormItem / FormLabel / FormControl / FormDescription / FormMessage)
| Prop | Type | Default | Description |
|---|---|---|---|
className | string | - | 追加のCSSクラス(全サブコンポーネント共通) |
children | ReactNode | - | FormMessageの場合、react-hook-formのエラーが無いときのみ表示される |
react-hook-formを使わない単純なフォームレイアウトが必要な場合は、react-hook-form非依存の Field コンポーネント群も利用できます。