カテゴリ: 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の条件分岐の使い方を完全ガイド!初心者でもわかるReactの条件分岐
New2
React
PropsとStateの違いを徹底解説!使い分けのポイントまとめ
New3
React
Reactのフォーム入力を再利用しよう!初心者でもわかるフィールドコンポーネント化の考え方
New4
React
Reactでできること一覧!初心者でもわかるWebアプリ・スマホアプリ・PWAの活用方法
人気記事
No.1
Java&Spring記事人気No1
React
Reactでキーボードイベントを活用する方法!onKeyDown, onKeyUp, onKeyPressを初心者向けに解説
No.2
Java&Spring記事人気No2
React
ReactのPresentational Componentを完全ガイド!初心者でもわかるStateを持たないコンポーネントの特徴
No.3
Java&Spring記事人気No3
React
ViteでReact開発環境を構築する手順を完全ガイド!初心者でもできるReactの環境構築
No.4
Java&Spring記事人気No4
React
Reactでフォーカスイベントを制御する方法!onFocusとonBlurを初心者向けに解説
No.5
Java&Spring記事人気No5
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.6
Java&Spring記事人気No6
Next.js
Next.js Server Componentsのメリット・デメリットを完全解説!初心者でもわかるNext.jsの基本
No.7
Java&Spring記事人気No7
React
Reactのカードコンポーネントを汎用的に設計する方法!初心者でもわかる再利用の考え方
No.8
Java&Spring記事人気No8
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!