Safariのみ、react-hook-formでcheckboxのvaluteがsubmitされないケースがありました。
reactやSafariのバージョンは下記になります。
react:18.2.0
react-hook-form:7.37.0
Safari:16.0
macOS Monterey:12.6
実際のソースコードで見ていきます。
Submitされるパターン
import { useForm } from "react-hook-form";
const Sample = () => { const { register, handleSubmit, } = useForm() const onSubmit = (data: any) => { console.log(data) } return ( <form onSubmit={handleSubmit(onSubmit)}> <label htmlFor="test">テスト</label> <input type="checkbox" {...register("test")} /> <input type="submit" /> </form> );
}
export default Sample
特別なことはしていません。
submitボタンを押下すると、onSubmit関数でコンソールログを表示します。
チェックボックスがチェックされていればログには{test: true}と表示され、チェックされていなければ{test: false}と表示されます。
これはSafariでも問題ありません。
Submitされないパターン
import { useState } from "react";
import { useForm } from "react-hook-form";
const Sample = () => { const { register, handleSubmit, } = useForm() const onSubmit = (data: any) => { console.log(data) } return ( <form onSubmit={handleSubmit(onSubmit)}> <label htmlFor="test">テスト</label> <input type="checkbox" {...register("test")} onChange={(e) => { console.log(e.target.checked); }} /> <input type="submit" /> </form> );
}
export default Sample
問題なのはこちらです。
1つ目と違うのはcheckboxのonChangeを追加してコンソールログを出力しているだけなのですが、なぜかSafariだとチェックをした状態でsubmitボタンを押下すると{test: false}と表示されます。
Chromeだとチェックをした状態だと{test: true}と表示されます。
謎です。
どなたか、解決策をご存知の方がいらっしゃたらTwitterで教えてくださいm(-_-)m