カテゴリ: React 更新日: 2026/03/15

Reactのコンポーネント再利用を強化!初心者でもわかるカスタムフックの使い方

再利用性を考慮したカスタムフックとの組み合わせ
再利用性を考慮したカスタムフックとの組み合わせ

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

生徒

「Reactで同じ処理を何回も書くのが大変です…」

先生

「それなら、カスタムフックを使うと楽になりますよ。」

生徒

「フックって難しそうですが、初心者でも使えますか?」

先生

「考え方はとてもシンプルです。一緒に順番に見ていきましょう。」

1. Reactのコンポーネント再利用とは?

1. Reactのコンポーネント再利用とは?
1. Reactのコンポーネント再利用とは?

Reactでは、画面を小さな部品であるコンポーネントに分けて作ります。 同じ見た目や同じ動きを何度も使う場合、毎回同じコードを書くのは大変です。 そこで登場する考え方が「再利用」です。

再利用とは、一度作った部品や処理を、別の場所でも使い回すことです。 例えるなら、毎回ゼロから料理を作るのではなく、作り置きのおかずを使うようなものです。 Reactでは、コンポーネントとカスタムフックを組み合わせることで、効率よく再利用ができます。

2. フックとは何かをやさしく理解しよう

2. フックとは何かをやさしく理解しよう
2. フックとは何かをやさしく理解しよう

フックとは、Reactに用意されている特別な関数の仕組みです。 よく使われるものに useStateuseEffect があります。 これらを使うことで、状態の管理や画面の更新が簡単になります。

初心者の方は「フック=便利な道具箱」だと思ってください。 ボタンを押した回数を覚えたり、入力された文字を保存したりする役割があります。 この仕組みを自分で作れるようにしたものが、カスタムフックです。

3. カスタムフックとは?

3. カスタムフックとは?
3. カスタムフックとは?

カスタムフックとは、自分で作るフックのことです。 名前は必ず use から始めます。 これにより、Reactがフックとして正しく扱ってくれます。

例えば、ボタンのクリック回数を管理する処理を、毎回コンポーネントに書くのは面倒です。 その処理をまとめてカスタムフックにしておけば、必要な場所で呼び出すだけで使えます。

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

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

ここでは、数値を増やすだけの簡単なカスタムフックを作ります。 初心者でも読みやすい内容なので、コードの流れを追ってみてください。


import { useState } from "react";

function useCounter() {
  const [count, setCount] = useState(0);

  const increment = () => {
    setCount(count + 1);
  };

  return { count, increment };
}

export default useCounter;
(内部で数値を保存し、呼び出した側で現在の数と増やす処理を使えるようになります)

5. カスタムフックをコンポーネントで使う

5. カスタムフックをコンポーネントで使う
5. カスタムフックをコンポーネントで使う

次に、作成したカスタムフックをコンポーネントで使ってみます。 コンポーネント側はとてもシンプルになり、見通しが良くなります。


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

function CounterButton() {
  const { count, increment } = useCounter();

  return (
    <div>
      <p>現在の数:{count}</p>
      <button onClick={increment}>増やす</button>
    </div>
  );
}

export default CounterButton;
(ボタンを押すたびに数値が1ずつ増えて表示されます)

6. 複数のコンポーネントで再利用する

6. 複数のコンポーネントで再利用する
6. 複数のコンポーネントで再利用する

カスタムフックの強みは、同じ処理を複数のコンポーネントで使える点です。 別の場所でも同じフックを呼び出せば、それぞれ独立した状態を持てます。


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

function AnotherCounter() {
  const { count, increment } = useCounter();

  return (
    <div>
      <h3>別のカウンター</h3>
      <p>{count}</p>
      <button onClick={increment}>クリック</button>
    </div>
  );
}

export default AnotherCounter;
(2つのカウンターは互いに影響せず、それぞれ独立して動きます)

7. 入力フォーム処理をカスタムフックに分ける

7. 入力フォーム処理をカスタムフックに分ける
7. 入力フォーム処理をカスタムフックに分ける

カスタムフックは、入力フォームの管理にも向いています。 文字の入力やリセット処理をまとめることで、コンポーネントがすっきりします。


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;
(入力された文字を保存し、変更時に自動で更新します)

8. コンポーネント分割とカスタムフックの相性

8. コンポーネント分割とカスタムフックの相性
8. コンポーネント分割とカスタムフックの相性

コンポーネントは見た目、カスタムフックは処理を担当すると考えると整理しやすくなります。 役割を分けることで、コードが読みやすくなり、修正もしやすくなります。

初心者のうちは「同じ処理を二回書いたら、フックにできないか考える」 という意識を持つだけで十分です。 少しずつ分割と再利用に慣れていきましょう。

カテゴリの一覧へ
新着記事
New1
React
コンポーネントの作り方!基本的な書き方と使い方をReact初心者向けに解説
New2
React
ReactのPresentational Componentを完全ガイド!初心者でもわかるStateを持たないコンポーネントの特徴
New3
React
Reactのコンポーネント再利用を強化!初心者でもわかるカスタムフックの使い方
New4
React
Reactのプロジェクト構成をわかりやすく解説!初心者でも理解できるsrcとpublicディレクトリ
人気記事
No.1
Java&Spring記事人気No1
React
Reactでキーボードイベントを活用する方法!onKeyDown, onKeyUp, onKeyPressを初心者向けに解説
No.2
Java&Spring記事人気No2
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.3
Java&Spring記事人気No3
React
Reactでフォーカスイベントを制御する方法!onFocusとonBlurを初心者向けに解説
No.4
Java&Spring記事人気No4
React
ViteでReact開発環境を構築する手順を完全ガイド!初心者でもできるReactの環境構築
No.5
Java&Spring記事人気No5
React
ReactでAxiosのPUT・DELETEリクエストを完全ガイド!初心者でもわかるAPI通信の基本
No.6
Java&Spring記事人気No6
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
React
ReactのPresentational Componentを完全ガイド!初心者でもわかるStateを持たないコンポーネントの特徴
No.8
Java&Spring記事人気No8
React
ReactでAxiosローディング状態を管理する方法を完全ガイド!初心者でもわかる非同期通信の基本