カテゴリ: 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
Next.js
Next.js Server Componentsでfetchが最強な理由を完全解説!初心者でもわかるNext.jsの基本
New2
React
Reactのカスタムフックでローカルストレージを管理する方法を初心者向けにやさしく解説!
New3
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック
New4
React
Reactのカスタムフックを使ったフォーム管理のベストプラクティス!初心者でも理解できるReactフォーム処理
人気記事
No.1
Java&Spring記事人気No1
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.2
Java&Spring記事人気No2
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.3
Java&Spring記事人気No3
React
ReactのuseEffect依存配列を徹底解説!初心者でも理解できるDependency Arrayの仕組み
No.4
Java&Spring記事人気No4
Next.js
Next.jsのApp RouterとServer Componentsの関係まとめ!初心者でもわかるNext.jsの新しい仕組み
No.5
Java&Spring記事人気No5
React
React開発におすすめのVSCode拡張機能まとめ!初心者でもすぐ使える便利ツール紹介
No.6
Java&Spring記事人気No6
Next.js
Next.jsとは?Reactとの関係を初心者向けにやさしく解説|Next.jsの基本概念と特徴
No.7
Java&Spring記事人気No7
React
Reactのフォーム入力値を初期化する方法を完全解説!初心者でもわかるリセット処理
No.8
Java&Spring記事人気No8
React
ReactのuseEffectで初回のみ処理を実行する方法を徹底解説!初心者でもわかるReactフック入門