0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【JSONPlaceholder】React × axios × JSONPlaceholder で始めるAPI通信ハンズオン

Posted at

1. はじめに

React で外部 API との通信を学び始めるとき、
「サーバー側がまだ無いけど、リクエストの書き方を練習したい」
という場面がありますよね。

今回はそんなときに便利な JSONPlaceholder を使い、
axios で GET / POST を実行する React のハンズオンを行います。

この記事で学べること:

  • JSONPlaceholder の役割と使い方
  • axios を使った GET / POST の基本
  • React アプリから API を扱う流れ
  • データ取得処理の流れ(Mermaid 図解つき)

実際に動く最小構成のアプリを作ってみましょう。


2. JSONPlaceholderとは何か

JSONPlaceholder は、学習・検証用に使える「無料のモックAPIサービス」です。
アカウント登録なしで REST API にアクセスでき、投稿データ・コメント・ユーザーなどの
ダミーデータを返してくれます。

JSONPlaceholder の特徴

  • 無料で利用できる
  • 認証不要
  • GET / POST / PUT / PATCH / DELETE を試せる
  • データは「保存されない」ため何度でも試せる
  • React の学習教材で定番

データ取得の流れ(図解)


3. 今回のハンズオンで作るもの

React から GETPOST のリクエストを試す簡易アプリを作ります。

  • GET:投稿の一覧を API から取得して表示
  • POST:新しい投稿(ダミー)を送信し、一覧に追加

完成イメージの流れはこちらです。


4. プロジェクトの準備

Vite で React プロジェクトを作ります。(create-react-appでも可)

npm create vite@latest react-axios-sample -- --template react
cd react-axios-sample
npm install

axios を追加します。

npm install axios

準備はこれだけです。

5. GETリクエストしてみよう

まずは投稿一覧を取得します。
JSONPlaceholder の endpoint は次の通りです。

GET https://jsonplaceholder.typicode.com/posts

6. POSTリクエストしてみよう

次に、ボタンを押したら新規投稿(ダミー)を送る処理を作ります。

POST https://jsonplaceholder.typicode.com/posts

※JSONPlaceholder の POST は「成功したように見せるだけ」で、
実際にサーバーに保存はされません。

POST 時の body の例:

{
  "title": "新しい投稿",
  "body": "これはダミー投稿です。",
  "userId": 1
}

7. GET / POST をまとめた簡易アプリを完成させよう

ここで最小構成の React + axios サンプルを紹介します。
(以下、Qiita掲載を想定して適度に省略しつつ必要十分なコードだけ掲載しています)

App.jsx(完成版)

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

function App() {
  const [posts, setPosts] = useState([]);
  const [loading, setLoading] = useState(false);
  const [posting, setPosting] = useState(false);

  // GET: 投稿を取得
  const fetchPosts = async () => {
    setLoading(true);
    try {
      const res = await axios.get(
        "https://jsonplaceholder.typicode.com/posts",
        { params: { _limit: 5 } }
      );
      setPosts(res.data);
    } finally {
      setLoading(false);
    }
  };

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

  // POST: 新規投稿
  const addPost = async () => {
    setPosting(true);
    try {
      const res = await axios.post(
        "https://jsonplaceholder.typicode.com/posts",
        {
          title: "新しい投稿",
          body: "これはダミー投稿です。",
          userId: 1,
        }
      );
      setPosts((prev) => [res.data, ...prev]);
    } finally {
      setPosting(false);
    }
  };

  return (
    <div style={{ padding: "20px", fontFamily: "sans-serif" }}>
      <h1>React × axios × JSONPlaceholder</h1>

      <button onClick={addPost} disabled={posting}>
        {posting ? "送信中..." : "POST: 新規投稿を追加する"}
      </button>

      {loading && <p>読み込み中...</p>}

      <ul>
        {posts.map((p) => (
          <li key={p.id} style={{ margin: "12px 0" }}>
            <h3>{p.title}</h3>
            <p>{p.body}</p>
          </li>
        ))}
      </ul>
    </div>
  );
}

export default App;

8. まとめ

今回は、React から axios を使って JSONPlaceholder に
GET / POST を送るハンズオンを行いました。

  • JSONPlaceholder は「学習に最適なモックAPI」

  • axios は

    • 自動 JSON パース
    • エラー時の reject
    • リクエスト/レスポンスのインターセプター
      などが便利
  • React + axios の基本的な流れを掴めば、
    実際の API への接続もスムーズに進む

次のステップとしては、以下もおすすめです。

  • React Query / SWR を組み合わせて通信を最適化
  • PUT / PATCH / DELETE を試して CRUD を完成
  • 自作の API サーバーと連携
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?