カテゴリ: 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 Routerのインストールとセットアップ手順を初心者向けに徹底解説
New2
React
Reactで学ぶ型安全なフォーム入力のState管理!初心者でも安心して作れる入力フォーム
New3
Next.js
Next.jsの環境変数(エンバイロンメントヘンスウ)の設定を完全ガイド!初心者でもわかる.envの使い方
New4
Next.js
Next.jsのCatch-all Routesとは?動的URLを一括で扱う方法を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.2
Java&Spring記事人気No2
React
Reactの学習ロードマップ!初心者が最短で習得する流れを完全ガイド
No.3
Java&Spring記事人気No3
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.4
Java&Spring記事人気No4
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.5
Java&Spring記事人気No5
React
React Context APIの値を更新する方法!useStateと組み合わせてデータを動かす初心者ガイド
No.6
Java&Spring記事人気No6
Next.js
Next.js CSRとISRの使い分けを初心者向けに解説!具体例でわかるNext.jsのレンダリング方法
No.7
Java&Spring記事人気No7
React
React useReducerとContext APIを組み合わせた本格的な状態管理ガイド
No.8
Java&Spring記事人気No8
React
React Context APIでフォーム管理を効率化!初心者向け実践ガイド