【Tanstack Form】送信時に全フィールドの検証を行う【React】
こんにちは、フリーランスエンジニアの太田雅昭です。
Tanstack Form
Tanstack FormはForm用ライブラリです。
https://tanstack.com/form/latest
これまでreact-hook-formを使っていましたが、Tanstack Formに乗り換えました。型安全で、自由度も高くストレス軽減につながります。
送信時に必ずしもすべてのフィールドは検証されない
例えばonSubmit検証をつけます。
<form.Field
name="age"
validators={{
onSubmit: ({ value }) =>
value < 13 ? 'You must be 13 to make an account' : undefined,
}}
>
{(field) => (
<>
...
</>
)}
</form.Field>
単体なら問題ありませんが、これが複数フィールドになると問題が出てきます。
- 送信
- フィールドA, フィールドBで検証エラー
- フィールドAを修正して送信
- フィールドAの検証が走らない
これは仕様のようですが、ケースによっては不適です。送信ボタンを押すとすべてのフィールドの検証が走り、適切なエラーメッセージがそれぞれで表示されるのが、ユーザーの自然な想定かと思います。
下記のようにすれば、毎回すべてのフィールドで検証が走るようになります。
onClick = ()=>{
form.validateAllFields('submit');
form.handleSubmit();
}