React Hook Form の <Controller>
を使っている時、renderの中でonChangeを定義しても上手く動かない。
// これは動かない
<Controller
control={control}
name="email"
render={({field}) => (
<TextField
{...field}
onChange={customOnChange}
/>
)}
/>
なぜ動かないかというと、field
に含まれるonChange
を呼び出していないからだ。
なので、自作のonChangeとfield.onChangeの両方を呼び出してやる必要がある。
// これで動く
<Controller
control={control}
name="email"
render={({field}) => (
<TextField
{...field}
onChange={(e) => {
field.onChange(e)
handleOnChange(e)
}}
/>
)}
/>
この理屈でいくと、register の時も同じなのかなと思ったが、registerの方はこんなことしなくても正常に動作していた。