Closed3

[memo] shadcnのCheckboxをformで使う

motoimotoi

基本、コンポーネントにはshadcnを使っていて、Checkboxもたまに使う。
使い方を超簡略化すると以下。

page.tsx
<form action={submit}>
  <Checkbox id="terms" name="agree"/>
  <Button type="submit">送信</Button>
</form>
submit.ts
export const submit = async (formData: FormData) => {
    const formJson = formDataToJSON(formData)
    const result = SCHEMA.safeParse(formJson)

    ...
}
motoimotoi

shadcnのCheckboxは、{ name: 'agree', value: 'on' }のように、onか存在しないかで値が返ってくる。が、大体、booleanで扱いたい場合がほとんどなのでは?ということで、zodのスキーマ(上記コードのSCHEMA)でbooleanに変換する。

shcema.ts
z.object({
    agree: z.preprocess((val) => val === 'on', z.boolean()),
})
このスクラップは3ヶ月前にクローズされました