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

ReactとTypeScriptの基本:非同期処理を扱うパターンをわかりやすく解説!初心者向け入門ガイド

TypeScriptで非同期処理を扱うパターン
TypeScriptで非同期処理を扱うパターン

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

生徒

「先生、Reactで非同期処理ってどうやって書くんですか?TypeScriptを使うときに特別な書き方があるんですか?」

先生

「いい質問だね。非同期処理は、APIを呼び出したり時間がかかる処理を待つときに必ず使うものだよ。TypeScriptを使うときには、結果の型を定義することで安全に使えるんだ。」

生徒

「なるほど!じゃあ、具体的にどう書けばいいんですか?」

先生

「実際のパターンをいくつか紹介するから、一緒に見ていこう!」

1. 非同期処理とは何か?

1. 非同期処理とは何か?
1. 非同期処理とは何か?

非同期処理とは「結果がすぐに返ってこない処理」を指します。例えば、インターネットからデータを取ってくるAPI通信や、時間がかかる計算処理などです。普通に処理を進めるとプログラム全体が止まってしまうので、非同期処理を使って「終わったら結果を教えてね」と指示します。

TypeScriptを使うと、この結果の「型」を指定することができ、プログラムが予想外の動きをするのを防げます。

2. Promiseを使った非同期処理

2. Promiseを使った非同期処理
2. Promiseを使った非同期処理

JavaScriptやTypeScriptで非同期処理を扱うときの基本はPromiseです。Promiseは「未来の値を表すオブジェクト」で、データがまだ手に入っていなくても「いずれ手に入る」と約束してくれます。


const fetchData = (): Promise<string> => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve("データ取得完了!");
    }, 1000);
  });
};

fetchData().then((result) => {
  console.log(result);
});

ここではPromise<string>と書いて「この非同期処理は文字列を返すよ」と型で約束しています。

3. async/awaitを使う書き方

3. async/awaitを使う書き方
3. async/awaitを使う書き方

非同期処理をもっと読みやすくするために、async/await構文を使います。awaitをつけると「Promiseの結果が返ってくるまで待つ」という意味になります。


const fetchData = async (): Promise<string> => {
  return "データ取得完了!";
};

const run = async () => {
  const result = await fetchData();
  console.log(result);
};

このように書くと、同期処理と同じように見えて、実際には非同期的に処理が進みます。

4. Reactで非同期処理を扱う

4. Reactで非同期処理を扱う
4. Reactで非同期処理を扱う

Reactのコンポーネントでは、API呼び出しなどの非同期処理をuseEffectフックの中で書くのが一般的です。TypeScriptを使うと、レスポンスの型をしっかりと定義できます。


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

type User = {
  id: number;
  name: string;
};

function App() {
  const [user, setUser] = useState<User | null>(null);

  useEffect(() => {
    const fetchUser = async () => {
      const response = await fetch("https://example.com/api/user/1");
      const data: User = await response.json();
      setUser(data);
    };
    fetchUser();
  }, []);

  return (
    <div>
      {user ? <p>{user.name} さんのデータを取得しました</p> : <p>読み込み中...</p>}
    </div>
  );
}

export default App;
(画面に「太郎 さんのデータを取得しました」と表示されます)

5. エラーハンドリングのパターン

5. エラーハンドリングのパターン
5. エラーハンドリングのパターン

非同期処理では「通信が失敗した」「サーバーからエラーが返ってきた」といったケースもあります。そのため、必ずエラーハンドリングを書くことが大切です。


try {
  const response = await fetch("https://example.com/api/user/1");
  if (!response.ok) {
    throw new Error("APIエラー");
  }
  const data: User = await response.json();
  setUser(data);
} catch (error) {
  console.error(error);
}

このようにtry...catchを使えば、失敗した場合にエラーメッセージを出したり、ユーザーに「失敗しました」と表示できます。

6. よくある非同期処理のパターン

6. よくある非同期処理のパターン
6. よくある非同期処理のパターン
  • データ取得の間は「読み込み中」と表示する
  • 取得が成功したら結果を表示する
  • 失敗したら「エラーが発生しました」と表示する

この三段階をきちんと扱えると、ユーザーにとってわかりやすいアプリになります。

7. 初心者が覚えておきたいポイント

7. 初心者が覚えておきたいポイント
7. 初心者が覚えておきたいポイント

TypeScriptで非同期処理を扱うときは、必ず「Promiseの型」を意識しましょう。例えばPromise<User>と書けば「この処理はUser型を返す」とわかります。また、async/awaitを使うと読みやすくなり、ReactではuseEffectと組み合わせて使うのが基本です。

カテゴリの一覧へ
新着記事
New1
React
Reactでイベントハンドラに引数を渡す方法をアロー関数で解説!初心者向けガイド
New2
React
Reactでキーボードイベントを活用する方法!onKeyDown, onKeyUp, onKeyPressを初心者向けに解説
New3
React
ReactとTypeScriptの基本:非同期処理を扱うパターンをわかりやすく解説!初心者向け入門ガイド
New4
Next.js
Next.js Server ComponentsがSEOに強い理由を完全解説!初心者でもわかるNext.jsの仕組み
人気記事
No.1
Java&Spring記事人気No1
React
ReactでonChangeイベントを使ってフォーム入力値を管理する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
React
ReactのuseEffectで初回のみ処理を実行する方法を徹底解説!初心者でもわかるReactフック入門
No.3
Java&Spring記事人気No3
React
ReactのuseEffect依存配列を徹底解説!初心者でも理解できるDependency Arrayの仕組み
No.4
Java&Spring記事人気No4
React
Reactのフォーム入力値を初期化する方法を完全解説!初心者でもわかるリセット処理
No.5
Java&Spring記事人気No5
Next.js
Next.jsとは?Reactとの関係を初心者向けにやさしく解説|Next.jsの基本概念と特徴
No.6
Java&Spring記事人気No6
React
create-react-appでReactプロジェクトを作成する手順を初心者向けに完全解説!
No.7
Java&Spring記事人気No7
React
useEffectでクリーンアップ関数を使う方法をやさしく解説
No.8
Java&Spring記事人気No8
React
複雑な条件分岐をコンポーネントに切り出す方法を徹底解説!React条件付きレンダリング入門