ガイド / チェックボックスとラジオグループ

チェックボックスとラジオグループ

チェックボックスやラジオグループの設定も、他の標準的な input と変わりません。

#ラジオグループ

ラジオグループを設定するには、すべての入力で name 属性が同じであることを確認してください。また、フィールドメタデータから initialValue を使用して、ラジオボタンがチェックされるべきかを導き出すこともできます。yup および zod からのエラーは、対応するパスに基づいてマッピングされ、各選択のエラーは、配列自体(例: answers )ではなく、対応するインデックス(例: answer[0] )にマッピングされます。すべてのエラーを表示したい場合は、フィールドメタデータの allErrors プロパティを代わりに使用することを検討できます。

1import { useForm } from '@conform-to/react';
2
3function Example() {
4  const [form, fields] = useForm();
5
6  return (
7    <form id={form.id}>
8      <fieldset>
9        <legend>Please select your favorite color</legend>
10        {['red', 'green', 'blue'].map((value) => (
11          <div key={value}>
12            <label>{value}</label>
13            <input
14              type="radio"
15              name={fields.color.name}
16              value={value}
17              defaultChecked={fields.color.initialValue === value}
18            />
19          </div>
20        ))}
21        <div>{fields.color.errors}</div>
22      </fieldset>
23      <button>Submit</button>
24    </form>
25  );
26}

#チェックボックス

チェックボックスグループの設定は、ラジオグループと似ていますが、チェックボックスがブール値なのかグループなのかについてサーバーサイドで情報が不足しているため、 initialValue は文字列または配列のいずれかになります。以下に示すように、 initialValue から defaultChecked 値を導出できます。

1import { useForm } from '@conform-to/react';
2
3function Example() {
4  const [form, fields] = useForm();
5
6  return (
7    <form id={form.id}>
8      <fieldset>
9        <legend>Please select the correct answers</legend>
10        {['a', 'b', 'c', 'd'].map((value) => (
11          <div key={value}>
12            <label>{value}</label>
13            <input
14              type="checkbox"
15              name={fields.answer.name}
16              value={value}
17              defaultChecked={
18                fields.answer.initialValue &&
19                Array.isArray(fields.answer.initialValue)
20                  ? fields.answer.initialValue.includes(value)
21                  : fields.answer.initialValue === value
22              }
23            />
24          </div>
25        ))}
26        <div>{fields.answer.errors}</div>
27      </fieldset>
28      <button>Submit</button>
29    </form>
30  );
31}

ただし、単一のチェックボックスの場合は、ブラウザによってデフォルトで on に設定されている入力 value と initialValue が一致するかどうかを確認できます。

1import { useForm } from '@conform-to/react';
2
3function Example() {
4  const [form, fields] = useForm();
5
6  return (
7    <form id={form.id}>
8      <div>
9        <label>Terms and conditions</label>
10        <input
11          name={fields.toc}
12          defaultChecked={fields.toc.initialValue === 'on'}
13        />
14        <div>{fields.toc.errors}</div>
15      </div>
16      <button>Submit</button>
17    </form>
18  );
19}