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

ReactのFetch APIを使ったベストプラクティスまとめ!初心者でもわかるサーバー通信の基本

Fetch APIを使ったベストプラクティスまとめ
Fetch APIを使ったベストプラクティスまとめ

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

生徒

「ReactでFetch APIってよく出てきますけど、使うときのコツとかあるんですか?」

先生

「はい、ただ使うだけじゃなく、Reactで使うときにはいくつか注意点やおすすめの使い方がありますよ。」

生徒

「初心者でも間違えない使い方が知りたいです!」

先生

「では、ReactとFetch APIを組み合わせたベストプラクティスをわかりやすく紹介していきましょう。」

1. ReactでFetch APIを使う基本の形

1. ReactでFetch APIを使う基本の形
1. ReactでFetch APIを使う基本の形

Fetch API(フェッチ・エーピーアイ)は、ブラウザに標準で備わっている機能で、サーバーからデータを取得するときに使います。

Reactでは、主にuseEffectフックと組み合わせて使われます。これにより、ページが表示されたときに自動で通信が行われるようになります。


import React, { useEffect, useState } from "react";

function App() {
  const [users, setUsers] = useState([]);

  useEffect(() => {
    fetch("https://jsonplaceholder.typicode.com/users")
      .then((res) => res.json())
      .then((data) => setUsers(data))
      .catch((err) => console.error(err));
  }, []);

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

export default App;
(画面にサーバーから取得したユーザー名の一覧が表示されます)

2. ベストプラクティス1:ローディング中の状態を表示しよう

2. ベストプラクティス1:ローディング中の状態を表示しよう
2. ベストプラクティス1:ローディング中の状態を表示しよう

データが読み込まれている間、何も表示されないと「アプリが固まっている」と思われてしまうかもしれません。

そのため、「ローディング中です…」などの表示を入れるのがベストプラクティスです。


const [loading, setLoading] = useState(true);

useEffect(() => {
  fetch("URL")
    .then((res) => res.json())
    .then((data) => {
      setUsers(data);
      setLoading(false);
    });
}, []);

if (loading) return <p>読み込み中です…</p>;

3. ベストプラクティス2:エラー処理は必ず書こう

3. ベストプラクティス2:エラー処理は必ず書こう
3. ベストプラクティス2:エラー処理は必ず書こう

サーバーが落ちていたり、通信に失敗したとき、ユーザーに何が起こったか分からないのは困ります。

そこで、.catch()を使ってエラーメッセージを表示するのが基本です。


.catch((error) => {
  console.error("通信エラー:", error);
  setError("データの取得に失敗しました");
});

4. ベストプラクティス3:非同期関数をasync/awaitで書こう

4. ベストプラクティス3:非同期関数をasync/awaitで書こう
4. ベストプラクティス3:非同期関数をasync/awaitで書こう

初心者には.then()よりもasync/awaitの書き方のほうが読みやすいという声も多いです。

より見やすく、エラー処理もしやすいので、Reactではよく使われています。


useEffect(() => {
  const fetchData = async () => {
    try {
      const res = await fetch("URL");
      const data = await res.json();
      setUsers(data);
    } catch (err) {
      setError("取得に失敗しました");
    } finally {
      setLoading(false);
    }
  };
  fetchData();
}, []);

5. ベストプラクティス4:useEffectの依存配列に注意しよう

5. ベストプラクティス4:useEffectの依存配列に注意しよう
5. ベストプラクティス4:useEffectの依存配列に注意しよう

useEffectの第二引数には[](空の配列)を渡すと、最初の1回だけ実行されます。

この書き方にすることで、ページ読み込み時のみFetchが動くようになり、無限ループになるのを防げます。

6. ベストプラクティス5:コンポーネントがアンマウントされたときのキャンセル処理

6. ベストプラクティス5:コンポーネントがアンマウントされたときのキャンセル処理
6. ベストプラクティス5:コンポーネントがアンマウントされたときのキャンセル処理

画面を切り替えた直後に通信が終わると、すでに消えたコンポーネントにsetStateしてエラーになることがあります。

その防止策として、AbortControllerを使う方法があります。


useEffect(() => {
  const controller = new AbortController();

  const fetchData = async () => {
    try {
      const res = await fetch("URL", { signal: controller.signal });
      const data = await res.json();
      setUsers(data);
    } catch (err) {
      if (err.name === "AbortError") {
        console.log("リクエストが中断されました");
      }
    }
  };

  fetchData();

  return () => {
    controller.abort();
  };
}, []);

7. よくある質問Q&A

7. よくある質問Q&A
7. よくある質問Q&A

Q. Fetch APIはReact専用ですか?

A. いいえ、Fetch APIはJavaScriptの機能なので、React以外でも使えます。ただし、Reactと組み合わせるときに気をつけるべきポイントが多くあるため、今回の記事でまとめました。

Q. Fetch APIをどのタイミングで呼び出すのがよい?

A. 基本的にはuseEffectを使って、コンポーネントが表示されたときに呼ぶのが一般的です。

Q. Fetch APIでPOSTやDELETEもできますか?

A. はい、できます。methodbodyなどを指定すれば、データの送信や削除も可能です。

カテゴリの一覧へ
新着記事
New1
React
Reactのフォーム入力を再利用しよう!初心者でもわかるフィールドコンポーネント化の考え方
New2
React
Reactでできること一覧!初心者でもわかるWebアプリ・スマホアプリ・PWAの活用方法
New3
React
React.jsが人気な理由!VueやAngularとの違いを初心者向けに徹底比較
New4
Next.js
Next.js×StorybookでUI開発環境を整える方法!初心者でもわかるNext.jsの環境構築
人気記事
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
Reactでフォーカスイベントを制御する方法!onFocusとonBlurを初心者向けに解説
No.4
Java&Spring記事人気No4
React
ViteでReact開発環境を構築する手順を完全ガイド!初心者でもできるReactの環境構築
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
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介