カテゴリ: React 更新日: 2026/02/21

Reactのカスタムフックを使ったフォーム管理のベストプラクティス!初心者でも理解できるReactフォーム処理

カスタムフックを使ったフォーム管理のベストプラクティス
カスタムフックを使ったフォーム管理のベストプラクティス

先生と生徒の会話形式で理解しよう

生徒

「Reactでフォームを作っていたら、同じようなコードばかりになりました…」

先生

「フォームが増えると、同じ処理を何度も書きがちですね」

生徒

「入力管理をもっと楽にする方法はないんですか?」

先生

「そんなときに役立つのが、カスタムフックを使ったフォーム管理です」

1. Reactのフォーム管理が難しく感じる理由

1. Reactのフォーム管理が難しく感じる理由
1. Reactのフォーム管理が難しく感じる理由

Reactのフォーム処理では、入力された文字や数字を状態として管理します。 状態とは、画面の今の情報を覚えておく箱のようなものです。

入力欄が一つなら簡単ですが、名前やメールアドレスなどが増えると、 状態の管理が複雑になります。 その結果、同じようなコードを何度も書くことになります。

2. カスタムフックとは何かをやさしく解説

2. カスタムフックとは何かをやさしく解説
2. カスタムフックとは何かをやさしく解説

カスタムフックとは、自分で作れる特別な関数です。 Reactに元から用意されているフックを組み合わせて使います。

例えるなら、毎回料理を一から作るのではなく、 下ごしらえ済みのセットを用意するようなものです。 よく使う処理をまとめることで、コードがすっきりします。

3. useStateだけでフォーム管理する例

3. useStateだけでフォーム管理する例
3. useStateだけでフォーム管理する例

まずは、カスタムフックを使わない基本的なフォーム管理を見てみます。 これは初心者が最初につまずきやすい形です。


import React, { useState } from "react";

function App() {
  const [name, setName] = useState("");

  return (
    <div>
      <input
        value={name}
        onChange={(e) => setName(e.target.value)}
      />
      <p>{name}</p>
    </div>
  );
}

export default App;
(入力した文字がそのまま画面に表示されます)

入力欄が増えるたびに、このような状態と処理を追加する必要があります。

4. シンプルなカスタムフックを作ってみよう

4. シンプルなカスタムフックを作ってみよう
4. シンプルなカスタムフックを作ってみよう

次に、入力管理をまとめたカスタムフックを作ります。 これにより、フォーム処理を一か所に集められます。


import { useState } from "react";

function useInput(initialValue) {
  const [value, setValue] = useState(initialValue);

  const onChange = (e) => {
    setValue(e.target.value);
  };

  return { value, onChange };
}

export default useInput;

このカスタムフックは、入力の値と変更処理をまとめて返しています。 難しそうに見えますが、よく使う処理を一つにしただけです。

5. カスタムフックを使ったフォーム管理の実例

5. カスタムフックを使ったフォーム管理の実例
5. カスタムフックを使ったフォーム管理の実例

作成したカスタムフックを、フォームで使ってみます。 コードが短くなり、読みやすくなります。


import React from "react";
import useInput from "./useInput";

function App() {
  const name = useInput("");

  return (
    <div>
      <input {...name} />
      <p>{name.value}</p>
    </div>
  );
}

export default App;
(入力内容が表示され、動きは先ほどと同じです)

同じ仕組みを、他の入力欄でも使い回せるようになりました。

6. 複数入力をまとめて管理するカスタムフック

6. 複数入力をまとめて管理するカスタムフック
6. 複数入力をまとめて管理するカスタムフック

フォームが増えると、複数の入力をまとめて扱いたくなります。 その場合は、オブジェクトで状態を管理します。


import { useState } from "react";

function useForm(initialValues) {
  const [values, setValues] = useState(initialValues);

  const handleChange = (e) => {
    setValues({
      ...values,
      [e.target.name]: e.target.value,
    });
  };

  return { values, handleChange };
}

export default useForm;

name属性を使うことで、どの入力が変更されたかを判断しています。 nameは入力欄の名札のようなものです。

7. フォーム管理で意識したいベストな考え方

7. フォーム管理で意識したいベストな考え方
7. フォーム管理で意識したいベストな考え方

カスタムフックを使うときは、役割を分けることが大切です。 表示はコンポーネント、管理はフックに任せます。

こうすることで、コードの見通しが良くなり、 修正や追加も簡単になります。 初心者でも安心してフォームを扱えるようになります。

8. カスタムフックを使うメリットを振り返る

8. カスタムフックを使うメリットを振り返る
8. カスタムフックを使うメリットを振り返る

フォーム管理をカスタムフックにまとめることで、 同じ処理を何度も書かずに済みます。

エラーも減り、どこで何をしているかが分かりやすくなります。 Reactのフォーム処理に慣れていない人ほど、 この方法の効果を実感できます。

カテゴリの一覧へ
新着記事
New1
React
Reactのリストとkeyをやさしく解説!初心者でもわかるリストアイテムをコンポーネントに分割する方法
New2
React
React RouterのuseNavigateフックの使い方を完全解説!初心者でもわかるプログラム的なページ遷移
New3
React
Reactでよくある型エラーと解決法をやさしく解説!初心者でも安心できる型安全な考え方
New4
Next.js
Next.js App Router入門!App RouterとPages Routerの根本的な違いを初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.2
Java&Spring記事人気No2
React
React Context APIのデバッグ方法を完全解説!React DevToolsで中身を丸見えにする方法
No.3
Java&Spring記事人気No3
React
Reactの学習ロードマップ!初心者が最短で習得する流れを完全ガイド
No.4
Java&Spring記事人気No4
React
React Routerとは?シングルページアプリのルーティングを初心者向けにわかりやすく解説
No.5
Java&Spring記事人気No5
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.6
Java&Spring記事人気No6
React
Reactでファイルアップロードを実装する方法を解説!Fetch APIで画像やPDFを送る仕組みを初心者向けに紹介
No.7
Java&Spring記事人気No7
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.8
Java&Spring記事人気No8
React
React開発におすすめのVSCode拡張機能まとめ!初心者でもすぐ使える便利ツール紹介