1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

React Hook Formでデフォルト値を設定する方法

1
Last updated at Posted at 2024-09-07

はじめに

React Hook Formを使用して、登録されているレコードの値があればモーダルのフォームに値を埋めた状態で、表示したかったのですが、結構実装に時間がかかったのでやり方を残しておきたいと思います。

実現したいこと

存在するレコードであれば、編集ボタンを押したら、モーダルが開き、保存されている値を表示する。
image.png

詰まったところ

クリックしたら、そのレコード情報を表示したかったが、前にクリックしたレコードの情報が残り続けて、更新されなかった。

実現方法

image.png
赤丸の編集ボタンをクリックします。
その際に、recordの情報(青で囲った部分)を渡します。
propsでrecord(編集をクリックした際に、渡されたレコード情報)を受け取ります。
valueでtitleを設定し、編集ボタンがクリックされた際に渡されたrecordの情報をuseEffectで更新します。

この際に、注意してほしいのが、useEffectでresetとsetTitleを設定して、値を更新することです。
更新しないと前の値のキャッシュが残っていて、値が正常に更新されません。

reset({
  title: record.title,
  time: record.time,
});
  • 以下は全体のコード
const { record } = props;
const [title, setTitle] = useState<string>("");

useEffect(() => {
  if (record) {
    reset({
      title: record.title,
    });
    setTitle(record.title);
  }
}, [reset, record]);

return(
  <FormControl isInvalid={!!errors.title}>
    <FormLabel>タイトル</FormLabel>
    <Input 
      value={title}
      {...register("title", {
        required: "内容の入力は必須です",
        onChange: (event) => {
          setTitle(event.target.value) 
        }
      })} />
  </FormControl>
)

終わりに

結構悩んだところなので、忘れずに押さえておきたいです。

参考

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?