カテゴリ: React 更新日: 2025/11/29

ReactのuseEffectでローディング状態を管理する方法を解説!初心者でもできる非同期処理の基本

useEffectでローディング状態を管理する方法
useEffectでローディング状態を管理する方法

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

生徒

「先生、Reactでデータをサーバーから取ってくるとき、画面が一瞬空っぽになってしまうのはどうしたらいいですか?」

先生

「そのときに使うのが『ローディング状態』です。データがまだ来ていないときは『読み込み中』などのメッセージを出して、ユーザーを安心させるんです。」

生徒

「なるほど!じゃあそのローディング状態はどうやって作るんですか?」

先生

「ReactではuseStateuseEffectを組み合わせて簡単に作れますよ。順番に説明していきますね。」

1. ローディング状態とは?

1. ローディング状態とは?
1. ローディング状態とは?

ローディング状態とは、APIを呼び出している間やデータが届くまでの「待機時間」をユーザーにわかりやすく伝える仕組みのことです。例えば「読み込み中...」や「データを取得しています」というメッセージを出すのが一般的です。

これがないと、ユーザーは「アプリが止まったのかな?」と不安になります。逆にローディング状態を表示することで「今データを準備しています」と伝えられるので、安心して待ってもらえるのです。

2. useStateでローディング状態を管理する

2. useStateでローディング状態を管理する
2. useStateでローディング状態を管理する

Reactでは、状態(state)を使ってローディングの有無を管理します。最初はtrueにして「読み込み中」にしておき、データ取得が終わったらfalseに切り替えます。

イメージとしては「旗(フラグ)」を立てておいて、処理が終わったらその旗を下ろすようなものです。

3. useEffectでローディング状態を切り替えるサンプルコード

3. useEffectでローディング状態を切り替えるサンプルコード
3. useEffectでローディング状態を切り替えるサンプルコード

実際にローディング状態を組み込んだコードを見てみましょう。


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

function App() {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    const fetchData = async () => {
      setLoading(true);
      const response = await fetch("https://jsonplaceholder.typicode.com/posts/1");
      const result = await response.json();
      setData(result);
      setLoading(false);
    };
    fetchData();
  }, []);

  return (
    <div>
      <h1>ローディング状態のサンプル</h1>
      {loading ? <p>読み込み中...</p> : <p>{data.title}</p>}
    </div>
  );
}

export default App;
(画面には最初「読み込み中...」と表示され、サーバーからデータが届くと記事タイトルが表示されます)

このようにloadingという状態を作ることで、データがまだないときと取得後を切り分けられます。

4. エラーハンドリングを組み合わせる

4. エラーハンドリングを組み合わせる
4. エラーハンドリングを組み合わせる

実際のアプリでは、通信エラーが起きることもあります。その場合もローディング状態を正しく切り替えて「エラーが起きました」と表示してあげると親切です。


const [error, setError] = useState(null);

useEffect(() => {
  const fetchData = async () => {
    setLoading(true);
    try {
      const response = await fetch("https://jsonplaceholder.typicode.com/posts/1");
      if (!response.ok) {
        throw new Error("データの取得に失敗しました");
      }
      const result = await response.json();
      setData(result);
    } catch (err) {
      setError(err.message);
    } finally {
      setLoading(false);
    }
  };
  fetchData();
}, []);

finallyを使うと、成功でも失敗でも必ずローディング状態を解除できます。これで画面がずっと「読み込み中」のままになる心配がなくなります。

5. ローディング表示を工夫してみよう

5. ローディング表示を工夫してみよう
5. ローディング表示を工夫してみよう

「読み込み中...」と表示するだけでも十分ですが、よりユーザーが待ちやすくする工夫もあります。例えば以下のような方法です。

  • アニメーション付きのスピナーを表示する
  • 灰色のブロックを仮の表示にして「読み込み中」を分かりやすくする(スケルトンUI)
  • メッセージに「少々お待ちください」など親切な文章を加える

こうした工夫を取り入れると、アプリの使いやすさがぐっと上がります。

6. どんなアプリでも役立つローディング管理

6. どんなアプリでも役立つローディング管理
6. どんなアプリでも役立つローディング管理

ローディング状態の管理は、どんなアプリでも共通して大事な仕組みです。たとえば次のような場面で必ず使います。

  • ニュースアプリで記事一覧を取得するとき
  • ショッピングサイトで商品情報を読み込むとき
  • 天気予報アプリで最新データを表示するとき
  • プロフィール画面でユーザー情報を取ってくるとき

これらすべてに共通しているのは「ユーザーに待ってもらう時間がある」ということです。だからこそ、useEffectとstateを組み合わせたローディング管理が重要になります。

カテゴリの一覧へ
新着記事
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
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
React
Reactのフォーム処理でよくあるエラーと解決法を完全解説!初心者でも安心して学べるReact入門
No.8
Java&Spring記事人気No8
React
Reactでファイルアップロードを実装する方法を解説!Fetch APIで画像やPDFを送る仕組みを初心者向けに紹介