Valibot スキーマ / parseWithValibot

parseWithValibot

提供された valibot スキーマを使用してフォームデータを解析し、送信内容の概要を返すヘルパーです。

1const submission = parseWithValibot(payload, options);

#パラメータ

payload

フォームの送信方法に応じて、 FormData オブジェクトまたは URLSearchParams オブジェクトのいずれかになります。

options.schema

Valibot スキーマ、または Valibot スキーマを返す関数のいずれかです。

options.info

フォームデータの解析時に使用される Valibot の解析設定および言語の選択 を指定します。

options.disableAutoCoercion

自動強制変換を無効にして、フォームデータの解析方法を自分で管理する場合は、true に設定します。

#

1import { parseWithValibot } from '@conform-to/valibot';
2import { useForm } from '@conform-to/react';
3import { pipe, string, email, object } from 'valibot';
4
5const schema = object({
6  email: pipe(string(), email()),
7  password: string(),
8});
9
10function Example() {
11  const [form, fields] = useForm({
12    onValidate({ formData }) {
13      return parseWithValibot(formData, { schema });
14    },
15  });
16
17  // ...
18}

#ヒント

自動強制変換

デフォルトでは、parseWithValibot は空の値を削除し、スキーマをイントロスペクトしてフォームの値を正しい型に強制し、内部的に coerceFormValue ヘルパーを使用して追加の前処理ステップを挿入します。

この動作をカスタマイズする場合は、options.disableAutoCoerciontrue に設定して自動強制変換を無効にし、自分で管理できます。

1import { parseWithValibot } from '@conform-to/valibot';
2import { useForm } from '@conform-to/react';
3import { pipe, object, transform, unknown, number } from 'valibot';
4
5const schema = object({
6  // 空の値を削除し、自分で数値を強制します
7  amount: pipe(
8    unknown(),
9    transform((value) => {
10      if (typeof value !== 'string') {
11        return value;
12      }
13
14      if (value === '') {
15        return undefined;
16      }
17
18      return Number(value.trim().replace(/,/g, ''));
19    }),
20    number(),
21  ),
22});
23
24function Example() {
25  const [form, fields] = useForm({
26    onValidate({ formData }) {
27      return parseWithValibot(formData, {
28        schema,
29        disableAutoCoercion: true,
30      });
31    },
32  });
33
34  // ...
35}