バリデーションルールを使用して、ユーザーから情報を収集します。
import React from 'react';import * as Form from '@radix-ui/react-form';import './styles.css';const FormDemo = () => (<Form.Root className="FormRoot"><Form.Field className="FormField" name="email"><div style={{ display: 'flex', alignItems: 'baseline', justifyContent: 'space-between' }}><Form.Label className="FormLabel">Email</Form.Label><Form.Message className="FormMessage" match="valueMissing">Please enter your email</Form.Message><Form.Message className="FormMessage" match="typeMismatch">Please provide a valid email</Form.Message></div><Form.Control asChild><input className="Input" type="email" required /></Form.Control></Form.Field><Form.Field className="FormField" name="question"><div style={{ display: 'flex', alignItems: 'baseline', justifyContent: 'space-between' }}><Form.Label className="FormLabel">Question</Form.Label><Form.Message className="FormMessage" match="valueMissing">Please enter a question</Form.Message></div><Form.Control asChild><textarea className="Textarea" required /></Form.Control></Form.Field><Form.Submit asChild><button className="Button" style={{ marginTop: 10 }}>Post question</button></Form.Submit></Form.Root>);export default FormDemo;
ネイティブブラウザ上に構築 制約バリデーションAPI。
組み込みバリデーションをサポート。
カスタムバリデーションをサポート。
バリデーションメッセージの完全なカスタマイズ。
アクセシブルなバリデーションメッセージ。
クライアントサイドとサーバーサイドのシナリオをサポート。
フォーカスは完全に管理されています。
コマンドラインからコンポーネントをインストールします。
すべての部品をインポートして組み合わせてください。
フォームのすべての部品を含みます。
フィールドのラッパーです。ID/nameとラベルのアクセシビリティを自動的に処理します。
Field
部品の中にネストされている場合、自動的に接続されるラベル要素です。
Field
部品の中にネストされている場合、自動的に接続されるコントロール要素(デフォルトではinput
)です。
Field
部品の中にネストされている場合、指定されたコントロールに自動的に接続される(機能とアクセシビリティ)バリデーションメッセージです。組み込みとカスタムのクライアントサイドバリデーション、およびサーバーサイドバリデーションに使用できます。Field
の外で使用する場合、フィールドに一致するname
プロパティを渡す必要があります。
Form.Message
は、メッセージの表示タイミングを決定するために使用される match
プロパティを受け入れます。これはネイティブのHTML妥当性状態(MDN上の ValidityState
)と一致し、required
、min
、max
などの属性に対して検証されます。指定された match
がコントロールの妥当性状態において true
の場合、メッセージが表示されます。
match
に関数は渡すこともでき、カスタム検証ルールを指定できます。
このレンダープロップコンポーネントを使用して、レンダリング時に特定のフィールドの妥当性状態にアクセスします(MDN参照)。フィールドの妥当性は、Field
内にネストされている場合は自動的に利用できます。それ以外の場合は、関連付けるために name
プロパティを渡す必要があります。
送信ボタン。
asChild
を使用すると、独自のコンポーネントで Form
プリミティブパーツを合成できます。
select
などの他のタイプの制御を合成するためにも使用できます。
注:現時点では、
Checkbox
、Select
など、Radix の他のフォームプリミティブとForm
を合成することはできません。解決策に取り組んでいます。
children
が提供されない場合、Form.Message
は、指定された match
のデフォルトのエラーメッセージをレンダリングします。
独自の children
を渡すことで、より意味のあるメッセージを提供できます。これは国際化にも役立ちます。
上記のすべての組み込みクライアントサイド検証一致に加えて、プラットフォームの検証機能を引き続き利用しながら、独自の検証を提供することもできます。制約検証APIにある customError
タイプを使用します。
Form.Message
の match
プロパティに独自の検証関数を渡すことができます。例を以下に示します。
match
は、コントロールの現在の値を最初の引数として、FormData
全体 を2番目の引数として呼び出されます。match
は非同期検証を実行するために非同期関数(またはプロミスを返す関数)にすることもできます。
関連部分に data-valid
属性と data-invalid
属性を追加します。これを使用して、コンポーネントを適切にスタイル設定します。Label
パーツのスタイル設定例を以下に示します。
独自のアイコンを表示したり、定義済みのプロパティを介してコンポーネントライブラリとインターフェースするために、フィールドの生の妥当性状態にアクセスする必要がある場合があります。Form.ValidityState
パーツを使用してこれを行うことができます。
このコンポーネントは、同じ Form.Message
コンポーネントを使用してサーバーサイド検証もサポートしています。クライアント側の整合ロジックに関係なくメッセージを強制的に表示させる forceMatch
プロパティを渡すことで、クライアントサイドエラーに対して定義したメッセージを再利用できます。
クライアント側にメッセージが存在しない場合は、match
を使用せずに Form.Message
をレンダリングすることもできます。serverInvalid
ブールプロパティを Form.Field
パーツに渡すことで、フィールドが無効としてマークされます。
サーバーサイドエラー処理の例を以下に示します。
Form.Root
パーツの onClearServerErrors
コールバックプロパティを使用して、サーバーエラーをクリアする必要があります。フォームが再送信される前と、フォームがリセットされるときに、サーバーエラーがクリアされます。
さらに、単一のサーバーエラーをリセットするタイミングを制御できます。たとえば、ユーザーがメールアドレスを編集するとすぐに、メールアドレスのサーバーエラーをリセットできます。
このコンポーネントは、検証に「インラインエラー」パターンに従います。
Form.Field
で指定された name
を使用して、ラベルとコントロールが関連付けられます。