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

ReactのuseEffectでデータを取得する方法を徹底解説!初心者でもわかるAPI通信の基本

useEffectでデータを取得する方法(API通信)
useEffectでデータを取得する方法(API通信)

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

生徒

「先生、Reactでインターネットからデータを取ってくることってできますか?」

先生

「もちろんできますよ。そのときによく使うのがuseEffectというフックです。」

生徒

「フックってなんでしたっけ?それにAPI通信ってなんだか難しそうです…」

先生

「フックはReactで特別な処理をするための仕組みで、API通信というのは外のサービスから情報をもらうことです。例えば天気情報を表示したり、ニュースサイトのデータを取得するのもAPI通信です。実際にプログラムを見てみましょう!」

1. useEffectでデータを取得する流れを理解しよう

1. useEffectでデータを取得する流れを理解しよう
1. useEffectでデータを取得する流れを理解しよう

Reactでデータを取得するときには、まずuseStateでデータを保存する場所を作り、次にuseEffectを使ってAPIにアクセスします。APIとは、アプリケーションが外部とやりとりするための「窓口」のようなものです。

例えば「犬の画像をランダムで取得するAPI」があるとします。これをReactで呼び出すと、実際の画像データをもらうことができます。その仕組みを理解するのが今回の目標です。

2. サンプルコード:犬の画像を取得するアプリ

2. サンプルコード:犬の画像を取得するアプリ
2. サンプルコード:犬の画像を取得するアプリ

それでは実際にAPI通信を使ったシンプルなReactアプリの例を見てみましょう。ここでは「Dog API」という無料サービスを使って、ランダムな犬の画像を表示します。


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

function App() {
  const [dogImage, setDogImage] = useState("");

  useEffect(() => {
    fetch("https://dog.ceo/api/breeds/image/random")
      .then((response) => response.json())
      .then((data) => setDogImage(data.message));
  }, []);

  return (
    

ランダムな犬の画像

{dogImage && <img src={dogImage} alt="犬" width="300" />}
); } export default App;
(画面に「ランダムな犬の画像」と表示され、下に犬の写真が表示されます。ページを更新するたびに違う犬の画像が出ます)

3. コードの仕組みをやさしく解説

3. コードの仕組みをやさしく解説
3. コードの仕組みをやさしく解説

このコードにはいくつかの重要なポイントがあります。

  • useState("") … 最初は空の文字列を保存しておき、そこに画像のURLが入ります。
  • useEffect(() => { ... }, []) … この中に書いた処理は、コンポーネントが最初に表示されたときに1回だけ実行されます。これを「副作用処理」と呼びます。
  • fetch("URL") … fetchはJavaScriptで用意されている機能で、インターネット上のデータを取りにいくことができます。
  • response.json() … APIから返ってきたデータを「JSON(ジェイソン)」という形式で変換しています。JSONはデータを整理してやりとりするための形式で、辞書のようなイメージです。
  • setDogImage(data.message) … 取得した犬の画像URLをstateに保存し、それを画面に表示します。

4. useEffectの依存配列について

4. useEffectの依存配列について
4. useEffectの依存配列について

useEffectには2つ目の引数として「依存配列」というものを渡します。上の例では[]を渡しました。これは「空の配列」なので、最初の1回だけ実行されるという意味です。

もしここに[dogImage]のように書いた場合は、dogImageが変わるたびにuseEffectがもう一度実行されます。つまり、どのタイミングで実行されるかを決めるのが依存配列の役割です。

5. ボタンを押して新しい画像を取得する例

5. ボタンを押して新しい画像を取得する例
5. ボタンを押して新しい画像を取得する例

今のコードはページをリロードしないと画像が変わりません。次はボタンを押したときに新しい犬の画像を取得するようにしてみましょう。


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

function App() {
  const [dogImage, setDogImage] = useState("");

  const fetchDog = () => {
    fetch("https://dog.ceo/api/breeds/image/random")
      .then((response) => response.json())
      .then((data) => setDogImage(data.message));
  };

  useEffect(() => {
    fetchDog();
  }, []);

  return (
    

犬の画像を取得するアプリ

{dogImage && <img src={dogImage} alt="犬" width="300" />}
); } export default App;
(画面に犬の画像が表示され、ボタンを押すと新しい犬の写真が切り替わります)

6. 初心者がつまずきやすいポイント

6. 初心者がつまずきやすいポイント
6. 初心者がつまずきやすいポイント

API通信を初めて使うときに混乱しやすい部分を整理しておきましょう。

  • 非同期処理 … fetchはすぐに結果が返るわけではなく、時間がかかる処理です。そのため「then」でつなげて、終わったときに処理をする必要があります。
  • CORSエラー … 場合によっては「CORSエラー」と呼ばれる通信制限に出会うことがあります。これはセキュリティのために外部サイトとの通信が制限されている状態です。公式に公開されているAPIを使えば基本的には問題ありません。
  • JSONの扱い … JSONは最初は見慣れないかもしれませんが、JavaScriptのオブジェクトとほとんど同じ感覚で扱えます。

これらを理解しておけば、Reactでのデータ取得がスムーズに進むでしょう。

まとめ

まとめ
まとめ

useEffectを使ったデータ取得の全体像を振り返ろう

この記事では、ReactのuseEffectを使って外部APIからデータを取得する基本的な流れを、初心者向けに一つずつ確認してきました。ReactでAPI通信を行う場合、「いつデータを取得するのか」「取得したデータをどこに保存するのか」「画面にはどのように表示されるのか」という流れを理解することがとても重要です。

最初に行うのはuseStateでデータを保存する場所を用意することです。APIから取得したデータは、そのまま画面に表示するのではなく、一度stateに保存します。こうすることで、データが更新されたときにReactが自動的に画面を再描画してくれるようになります。

次に重要なのがuseEffectの役割です。useEffectは、コンポーネントが表示されたあとに処理を実行するための仕組みで、API通信のような「画面表示とは直接関係しない処理」を書くのに適しています。ページを開いたときに一度だけデータを取得したい場合は、依存配列に空の配列を指定することで実現できます。

依存配列と再取得の考え方

useEffectの依存配列は、初心者がつまずきやすいポイントの一つですが、考え方はとてもシンプルです。「どの値が変わったときに、この処理をもう一度実行したいか」を指定するためのものです。空の配列であれば最初の一回だけ、特定のstateを指定すれば、その値が変わったときに再実行されます。

記事の中で紹介した「ボタンを押して新しい犬の画像を取得する例」では、useEffectは初回のデータ取得だけに使い、ボタンを押したときの処理は関数として切り出しました。このように、useEffectとイベント処理を役割ごとに分けることで、コードが読みやすくなり、動きも理解しやすくなります。

シンプルな構成のサンプルコード


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

function App() {
  const [message, setMessage] = useState("データを取得中です");

  useEffect(() => {
    setMessage("データの取得が完了しました");
  }, []);

  return (
    <div>
      <p>{message}</p>
    </div>
  );
}

export default App;
(画面に「データを取得中です」と表示され、少しすると「データの取得が完了しました」に変わったようなイメージになります)

このサンプルはAPI通信そのものは行っていませんが、useEffectが「画面表示後に処理を実行する」という役割を持っていることを理解するのに役立ちます。実際のAPI通信でも、この考え方はまったく同じです。

先生と生徒の振り返り会話

生徒

「useEffectって、最初は難しそうだと思っていましたけど、画面が表示されたあとに動く処理を書く場所だと考えると分かりやすいですね。」

先生

「その理解でとても良いですよ。Reactでは、画面を作る部分と、データを取りにいく部分を分けて考えるのが基本です。」

生徒

「API通信も、useStateで保存して、useEffectで取得する、という流れを意識すれば整理できますね。」

先生

「その通りです。まずは今回のようなシンプルな例で慣れていくと、ニュース取得やユーザー情報の表示など、いろいろな場面に応用できるようになります。」

生徒

「依存配列の意味も少しずつ分かってきました。次は自分で別のAPIを使ってみたいです!」

先生

「ぜひ挑戦してみてください。Reactでのデータ取得は、使えば使うほど理解が深まりますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

ReactのuseEffectはどのようなタイミングで実行されますか?

ReactのuseEffectは、コンポーネントが最初に表示されたときに実行されます。依存配列に何も指定しない場合(空の配列[])、初回レンダリング時に1回だけ実行されるため、API通信などの初期データ取得に適しています。
カテゴリの一覧へ
新着記事
New1
React
Reactコンポーネントの再利用と分割を完全マスター!初心者でもわかるコンポーネント設計
New2
React
ReactでAxiosインターセプターの使い方を完全ガイド!初心者でもわかるリクエストとレスポンスの処理方法
New3
React
JSXの書き方!初心者でもわかるReactタグと属性の基本ルール解説
New4
React
ReactとDockerを使った開発環境構築の基本を徹底解説!初心者でもわかるReactとDockerの連携方法
人気記事
No.1
Java&Spring記事人気No1
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.3
Java&Spring記事人気No3
React
Reactのイベントハンドリングのアンチパターンまとめ!初心者でもわかる注意点
No.4
Java&Spring記事人気No4
React
ReactでFetch APIのローディング状態を管理する方法|初心者にもわかる解説
No.5
Java&Spring記事人気No5
React
Reactのカスタムフックの作り方を完全ガイド!再利用可能なロジックを切り出す仕組み
No.6
Java&Spring記事人気No6
React
ReactのuseStateとuseEffectでよくあるエラーと解決方法ガイド!初心者でもわかるReactフック
No.7
Java&Spring記事人気No7
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.8
Java&Spring記事人気No8
React
Reactでファイルアップロードを実装する方法を解説!Fetch APIで画像やPDFを送る仕組みを初心者向けに紹介