1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

react-hook-formchakra-ui (v2) を使って編集フォームを作成していたところ、入力フィールドの値が編集できない 問題に遭遇しました。
ここでは、その原因と解決方法をまとめます。

問題のコード

まず、登録済みの情報が正しく表示されるか確認するために、value 属性に値を設定していました。

<Input
  placeholder="名前を入力"
  {...register('name')}
  isInvalid={!!errors.name}
  value={user?.name} // 問題の箇所
/>

これで登録済みの情報は表示されたのですが、編集ができない状態となりました。

解決方法

この部分はreact-hook-formregisterが、valueonChangeを自動で設定するため、valueを指定すると上書きされてしまいうまく動作しなくなるようです。
そこで、以下の2点を修正することで解決することができました。

1. value属性を削除

<Input
  placeholder="名前を入力"
  {...register('name')}
  isInvalid={!!errors.name}
  // value属性を削除
/>

2. setValueで初期値をセット

const { register, setValue } = useForm(...);

// useEffect内でデータロード後に値をセット
useEffect(() => {
  const fetchData = async () => {
    const userData = await getUserById(id);
    setValue('name', userData.name); // nameに値をセット
    ...
  };
  fetchData();
}, [id, setValue]);

これだけで、既存のデータをフォームに反映しつつ、入力もできるようになります!

最後に

react-hook-formを使う際は、入力フィールドにvalue属性を指定せずに、useFormsetValueを利用することを学びました。
他にもdefaultValuesを利用する方法もあるようですが、こちらは初期登録時に利用することが推奨されています。
それぞれ適切な場面で使い分けていきたいと思います。

参考サイト

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?