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

ReactのカスタムフックとContext APIを組み合わせたAPI管理を解説!初心者でもわかるReactのデータ管理

カスタムフックとContext APIを組み合わせたAPI管理
カスタムフックとContext APIを組み合わせたAPI管理

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

生徒

「Reactで複数のコンポーネントから同じAPIのデータを使いたいときってどうすればいいんですか?」

先生

「そんなときは、カスタムフックとContext APIを組み合わせると便利です。データを一度だけ取得して、全体で共有できるんですよ。」

生徒

「カスタムフックとContext APIってどうやって組み合わせるんですか?」

先生

「それでは、順番に仕組みと実際のコード例を見ていきましょう!」

1. Context APIとは?初心者向けの解説

1. Context APIとは?初心者向けの解説
1. Context APIとは?初心者向けの解説

Context APIは、Reactでデータをグローバルに共有する仕組みです。通常は親から子へと順番にpropsでデータを渡しますが、複数の階層を超えてデータを渡すとコードが複雑になります。Context APIを使えば、データを「どこからでも参照できる共有スペース」に保存できるので、どのコンポーネントからでも簡単に呼び出せます。

例えるなら、クラスの黒板のようなものです。先生が黒板に書いた情報は、教室のどの席に座っている生徒でも見ることができます。これと同じように、Context APIを使うと一度だけ設定したデータをアプリ全体で利用できるようになります。

2. カスタムフックと組み合わせるメリット

2. カスタムフックと組み合わせるメリット
2. カスタムフックと組み合わせるメリット

カスタムフックは処理をひとまとめにして再利用できる便利な仕組みです。APIの呼び出しやエラー処理をカスタムフックに書いておけば、複数のコンポーネントで同じ処理を何度も書く必要がなくなります。

さらに、Context APIと組み合わせると「一度取得したデータを全体で使い回せる」ようになります。これにより、無駄なAPI呼び出しを減らし、アプリの動作を効率化できます。

3. 実際にAPI管理用のカスタムフックを作ろう

3. 実際にAPI管理用のカスタムフックを作ろう
3. 実際にAPI管理用のカスタムフックを作ろう

まずは、APIを呼び出すカスタムフックを作ります。ここではユーザー情報を取得する例を使います。


import { useState, useEffect } from "react";

function useUsersAPI() {
  const [users, setUsers] = useState([]);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    const fetchUsers = async () => {
      try {
        const res = await fetch("https://jsonplaceholder.typicode.com/users");
        const data = await res.json();
        setUsers(data);
      } catch (err) {
        setError(err);
      } finally {
        setLoading(false);
      }
    };
    fetchUsers();
  }, []);

  return { users, loading, error };
}

export default useUsersAPI;
(このカスタムフックを呼び出すと、ユーザー情報が取得されます)

4. Contextを作成してデータを共有しよう

4. Contextを作成してデータを共有しよう
4. Contextを作成してデータを共有しよう

次に、Context APIを使ってアプリ全体でデータを共有できるようにします。カスタムフックで取得したデータをContextに渡して、どのコンポーネントからでも利用できるようにします。


import React, { createContext, useContext } from "react";
import useUsersAPI from "./useUsersAPI";

const UsersContext = createContext();

export function UsersProvider({ children }) {
  const { users, loading, error } = useUsersAPI();
  return (
    <UsersContext.Provider value={{ users, loading, error }}>
      {children}
    </UsersContext.Provider>
  );
}

export function useUsers() {
  return useContext(UsersContext);
}
(UsersProviderで全体を囲むと、アプリ内のどこでもユーザー情報を呼び出せます)

5. Contextを使ってコンポーネントにデータを表示

5. Contextを使ってコンポーネントにデータを表示
5. Contextを使ってコンポーネントにデータを表示

最後に、実際にContextからデータを取り出して画面に表示してみましょう。


import React from "react";
import { UsersProvider, useUsers } from "./UsersContext";

function UsersList() {
  const { users, loading, error } = useUsers();

  if (loading) return <p>読み込み中です...</p>;
  if (error) return <p>エラーが発生しました: {error.message}</p>;

  return (
    <ul>
      {users.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}

function App() {
  return (
    <UsersProvider>
      <h1>ユーザー一覧</h1>
      <UsersList />
    </UsersProvider>
  );
}

export default App;
(画面にユーザーの一覧が表示され、APIから取得したデータを全体で共有しています)

6. カスタムフックとContext APIを組み合わせる利点

6. カスタムフックとContext APIを組み合わせる利点
6. カスタムフックとContext APIを組み合わせる利点

この方法を使うと、一度だけAPIを呼び出して、その結果をアプリ全体で共有できます。複数の画面で同じデータを使う場合、いちいちAPIを呼び出さずに済むので効率的です。

また、データ管理が一箇所に集まるためコードの見通しが良くなり、チーム開発でも扱いやすくなります。初心者のうちからこの仕組みを理解しておくと、後々の開発がとてもスムーズになります。

カテゴリの一覧へ
新着記事
New1
React
useStateの型推論と明示的型指定の違いを完全解説!初心者でもわかるReactとTypeScriptの基本
New2
React
Reactの条件分岐の使い方を完全ガイド!初心者でもわかるReactの条件分岐
New3
React
Reactのカスタムフックでキャッシュ機能を実装する方法を解説!初心者でもわかるデータ管理
New4
Next.js
Next.js App Routerでlayout.tsxを使う方法を完全ガイド!初心者でもわかるUIの共有
人気記事
No.1
Java&Spring記事人気No1
React
ReactのPropsを使ってコンポーネントの表示を動的に切り替える方法を解説!初心者でもわかるReact入門
No.2
Java&Spring記事人気No2
React
ViteでReact開発環境を構築する手順を完全ガイド!初心者でもできるReactの環境構築
No.3
Java&Spring記事人気No3
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.4
Java&Spring記事人気No4
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.5
Java&Spring記事人気No5
React
スマホ対応!Reactでレスポンシブデザイン対応のコンポーネント設計を初心者向けに解説
No.6
Java&Spring記事人気No6
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.7
Java&Spring記事人気No7
React
Reactのチェックボックス入力を完全解説!初心者でもわかるReactフォーム処理
No.8
Java&Spring記事人気No8
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック