0Pricing
React Academy · レッスン

useFieldArrayによる動的フィールド

useFieldArray hookを使って、動的なフォームフィールドの追加、削除、並べ替えを行います。

「useFieldArrayによる動的フィールド」はCoddyKit上の無料React Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

ようこそ

このレッスンでは、React Hook FormのuseFieldArrayフックを使用して、動的なフィールドのリストを持つフォームを作成します。項目の追加、削除、並べ替えなどを行います。

useFieldArrayとは

useFieldArrayは、React Hook Form内のフィールド配列を管理します。フィールドのリストを操作するためのappend、prepend、remove、swap、move、insertメソッドを提供します。
import { useFieldArray } from 'react-hook-form';

const { fields, append, remove } = useFieldArray({
  control,
  name: 'phoneNumbers',
});

セットアップ: useFormのcontrol

useFieldArrayには、useFormから取得した`control`オブジェクトが必要です。registerやhandleSubmitと同時に分割代入します。
const { register, control, handleSubmit } = useForm({
  defaultValues: { phoneNumbers: [{ value: '' }] },
});

フィールドのレンダリング

`fields`を反復処理して各項目をレンダリングします。Reactのキーにはフィールドの`id`を使用し、インデックスは使用しないでください。配列パス構文で各フィールドを登録します。
return fields.map((field, index) => (
  <div key={field.id}>
    <input
      {...register(`phoneNumbers.${index}.value`)}
    />
    <button onClick={() => remove(index)}>Remove</button>
  </div>
));

新しいフィールドの追加

デフォルト値のオブジェクトを指定してappend()を呼び出すと、リストの末尾に新しいフィールドを追加できます。フォームが自動的に登録します。
<button onClick={() => append({ value: '' })}>
  Add Phone Number
</button>

フィールドの削除

remove(index)を呼び出すと、指定した位置のフィールドを削除できます。それ以降のフィールドは詰められ、登録も自動的に更新されます。
<button onClick={() => remove(index)}>Delete</button>

フィールド数の最小値バリデーション

Zodスキーマで.min()を使用して配列の長さを検証し、少なくとも1つのフィールドが存在することを保証できます。
const schema = z.object({
  emails: z.array(z.object({ value: z.string().email() }))
           .min(1, 'At least one email required'),
});

フィールドの入れ替えと移動

`swap(indexA, indexB)`を使用すると2つのフィールドを入れ替えられます。また、`move(from, to)`を使用するとフィールドを別の位置へ移動できます。これらは、ドラッグ&ドロップで並べ替えられるフィールドリストの作成に使用します。
swap(0, 2); // swap first and third items
move(3, 0); // move item at index 3 to the top

ネストしたuseFieldArray

useFieldArrayの中に別のuseFieldArrayをネストして、複数レベルの動的フォームを作成できます(たとえば、各明細にサブ項目がある請求書など)。

配列データの送信

送信時、handleSubmitはデータオブジェクトの一部として配列全体を渡します。data.phoneNumbersからアクセスでき、フィールド構造に一致するオブジェクトの配列になっています。
const onSubmit = (data) => {
  console.log(data.phoneNumbers);
  // [{ value: '555-1234' }, { value: '555-5678' }]
};

確認問題

useFieldArrayのフィールドをレンダリングするとき、Reactのキーに配列のインデックスではなくfield.idを使用するのはなぜですか?

まとめ

useFieldArrayは、fields配列とappend/remove/swap/moveメソッドを提供します。Reactのキーにはfield.idを使用し、'fieldName.index.subfield'構文で登録し、Zodのmin/maxで配列を検証します。

コース完了

おめでとうございます!**Managing Forms with React Hook Form**を修了しました。これでRHFを使った高パフォーマンスなフォームの構築、Zodスキーマバリデーションの適用、動的なフィールド配列の作成ができるようになりました。

よくある質問

「useFieldArrayによる動的フィールド」レッスンは無料ですか?

はい。「useFieldArrayによる動的フィールド」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「useFieldArrayによる動的フィールド」で何を学びますか?

useFieldArray hookを使って、動的なフォームフィールドの追加、削除、並べ替えを行います。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「useFieldArrayによる動的フィールド」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. React Hook Formを始める
  2. バリデーションルールとエラーメッセージ
  3. ZodによるSchema Validation
  4. useFieldArrayによる動的フィールド
← React Academyに戻る