カテゴリ: React 更新日: 2026/01/25

ReactでAxiosのリクエストキャンセルを実装する方法を完全ガイド!初心者でもわかるAPI通信の基礎

Axiosでリクエストキャンセルを実装する方法
Axiosでリクエストキャンセルを実装する方法

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

生徒

「先生、ReactでAPI通信をしているときに、途中でリクエストを止めたいときはどうすればいいんですか?」

先生

「それはリクエストキャンセルを使えばできますよ。Axiosには通信を途中で中止する仕組みが用意されています。」

生徒

「キャンセルって、ゲームのダウンロードを途中でやめるみたいな感じですか?」

先生

「そういうイメージです!不要になった通信を止めることで無駄な処理を避けたり、ユーザーにとって快適な動作を実現できます。では実際に書き方を見てみましょう。」

1. リクエストキャンセルとは?

1. リクエストキャンセルとは?
1. リクエストキャンセルとは?

リクエストキャンセルとは、進行中のAPI通信を途中で中断することを指します。例えば、検索ボックスに文字を入力するたびにサーバーに問い合わせるような場合、前のリクエストは不要になることがあります。そのときにキャンセルをしておけば、無駄な処理を避けられます。

これにより「最新の入力結果だけを表示する」ようにできるため、ユーザー体験が向上します。

2. Axiosでのリクエストキャンセルの基本

2. Axiosでのリクエストキャンセルの基本
2. Axiosでのリクエストキャンセルの基本

Axiosでは、AbortControllerという仕組みを使ってリクエストをキャンセルできます。これは「中止ボタン」のような役割を持つオブジェクトです。


import axios from "axios";

const controller = new AbortController();

axios.get("https://api.example.com/data", {
  signal: controller.signal
})
.then(response => {
  console.log(response.data);
})
.catch(error => {
  if (axios.isCancel(error)) {
    console.log("リクエストがキャンセルされました");
  } else {
    console.error("エラー:", error.message);
  }
});

// キャンセル実行
controller.abort();
この場合、controller.abort()を呼び出すとリクエストは中止され、キャンセルエラーが返ります。

3. Reactコンポーネントでキャンセルを使う

3. Reactコンポーネントでキャンセルを使う
3. Reactコンポーネントでキャンセルを使う

Reactのコンポーネントでは、画面を切り替えたときに古いリクエストをキャンセルするのが一般的です。これにより「アンマウントされたコンポーネントでデータを更新しようとしてエラーになる」問題を防げます。


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

function App() {
  const [data, setData] = useState(null);
  const [error, setError] = useState("");

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

    axios.get("https://api.example.com/data", { signal: controller.signal })
      .then(res => setData(res.data))
      .catch(err => {
        if (err.name === "CanceledError") {
          console.log("キャンセルされました");
        } else {
          setError("データ取得に失敗しました");
        }
      });

    return () => {
      controller.abort(); // クリーンアップ時にキャンセル
    };
  }, []);

  if (error) return <p>{error}</p>;
  if (!data) return <p>読み込み中...</p>;

  return (
    <div>
      <h1>取得したデータ</h1>
      <pre>{JSON.stringify(data, null, 2)}</pre>
    </div>
  );
}

export default App;
コンポーネントが画面から消えるときにキャンセルされるので、無駄な通信を避けられます。

4. ユーザー操作でキャンセルする

4. ユーザー操作でキャンセルする
4. ユーザー操作でキャンセルする

ユーザーが「キャンセルボタン」を押したときにリクエストを止めることも可能です。長い処理や大量データのダウンロードでは便利です。


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

function App() {
  const [controller, setController] = useState(null);

  const fetchData = () => {
    const newController = new AbortController();
    setController(newController);

    axios.get("https://api.example.com/slow", { signal: newController.signal })
      .then(res => console.log(res.data))
      .catch(err => {
        if (err.name === "CanceledError") {
          console.log("キャンセルされました");
        } else {
          console.error(err);
        }
      });
  };

  const cancelRequest = () => {
    if (controller) {
      controller.abort();
    }
  };

  return (
    <div>
      <button onClick={fetchData}>データ取得</button>
      <button onClick={cancelRequest}>キャンセル</button>
    </div>
  );
}

export default App;
データ取得中に「キャンセル」ボタンを押すと、通信が途中で止まりエラー処理に移ります。

5. 実務でのリクエストキャンセルの活用例

5. 実務でのリクエストキャンセルの活用例
5. 実務でのリクエストキャンセルの活用例

リクエストキャンセルは以下のような場面で役立ちます。

  • 検索ボックスで文字を打ち直したとき、前のリクエストを中止する
  • 画面遷移したとき、古いページの通信を止める
  • ユーザーが「キャンセルボタン」を押したときに即座に停止する

こうした工夫によって、アプリは無駄な処理を減らし、ユーザーに快適な体験を提供できるのです。

6. キャンセル処理の注意点

6. キャンセル処理の注意点
6. キャンセル処理の注意点

リクエストキャンセルを実装するときには次の点に注意しましょう。

  • キャンセルされた場合と通常のエラーを区別して処理する
  • 複数のリクエストを扱うときは、それぞれのコントローラを管理する
  • ユーザーに「キャンセルされました」と明示するとわかりやすい

正しく実装することで、より安全で快適なReactアプリケーションを作ることができます。

カテゴリの一覧へ
新着記事
New1
React
Reactのチェックボックス入力を完全解説!初心者でもわかるReactフォーム処理
New2
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
New3
React
Reactのライフサイクルにおけるアンチパターンまとめ!初心者でもわかるReactの注意点
New4
React
ReactでAxiosのリトライ処理を実装する方法を完全ガイド!初心者でもわかるAPI通信の安定化テクニック
人気記事
No.1
Java&Spring記事人気No1
React
ViteでReact開発環境を構築する手順を完全ガイド!初心者でもできるReactの環境構築
No.2
Java&Spring記事人気No2
React
ReactのPropsを使ってコンポーネントの表示を動的に切り替える方法を解説!初心者でもわかるReact入門
No.3
Java&Spring記事人気No3
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.4
Java&Spring記事人気No4
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック
No.5
Java&Spring記事人気No5
React
Reactの環境構築とは?初心者でもできるセットアップ手順まとめ
No.6
Java&Spring記事人気No6
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.7
Java&Spring記事人気No7
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.8
Java&Spring記事人気No8
React
Reactで複数イベントをまとめて処理!共通関数化でコード整理