0
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?

reach hook form useFieldArrayについて

Posted at

※react hook form ver7を使用しています。

useFieldArrayについて

入力ボックスを動的に増やしたり減らしたりするときに使う。
公式

これを知るまでは、入力ボックスを配列としてuseStateで管理して、どうのこうのしていました・・・

googleで検索するとたくさん記事があると思います。
それらを参考にしたとき、useFieldArrayの型で少し苦戦したのでメモ程度に書いておきます。

コード

 import React from "react";
import { useForm, useFieldArray } from "react-hook-form";

//エラーになる型
// type FormValues = {
//   inputs: string[]; // 配列データの型を定義
// };

//エラーにならない型
type FormValues = {
  inputs: { input: string }[]; // 配列データの型を定義
};

export default function FieldArrayExample() {
  const { control, register, handleSubmit } = useForm<FormValues>({
    defaultValues: {
      inputs: [{ input: "" }], // 初期値を設定
    },
  });

  const { fields, append, remove } = useFieldArray({
    control,
    name: "inputs",
  });

  const onSubmit = (data: FormValues) => {
    console.log(data);
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      {fields.map((field, index) => (
        <div key={field.id}>
          <input {...register(`inputs.${index}`)} />
          <button type="button" onClick={() => remove(index)}>
            Remove
          </button>
        </div>
      ))}
      <button type="button" onClick={() => append({ input: "" })}>
        Add
      </button>
      <button type="submit">Submit</button>
    </form>
  );
}

ポイント

useFormで定義するtypeは、オブジェクト配列にする必要がある。
非オブジェクト型の配列だとエラーになる。

0
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
0
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?