Webアプリプログラミング

React(Next.js)でAPIを活用するコンポーネント作成する【JSONPlaceholder】

reactでAPIのコンポーネントを作成記事のアイキャッチ画像 Webアプリ

Reactなどでフロントエンド開発をしているときに、試しにAPIを含む処理を実装したいと思うことは多々あります。しかし都合よくAPIが用意できるとは限りません。そんな時に活躍するフリーのAPIが「JSONPlaceholder」です。
今回はそのAPIを使って、受け取った情報を表示するコンポーネントを試作しました。

スポンサーリンク

JSONPlaceholderとは

公式に書かれている紹介を要約すると、模擬データが欲しい場合に使用できる無料のREST APIです。
つまりインターネットに接続されていれば誰でも使えるAPIです。ありがたい!

JSONPlaceholder - Free Fake REST API

APIにはいくつか種類(投稿、ユーザ、アルバム、写真)があり、それぞれで返ってくるデータの構造が異なります。

スポンサーリンク

React(Next.js)でAPIの応答を受け取るコンポーネントを作成

いくつかあるデータの中から今回は、「/photos」を使用しました。

データ構造の確認

/photosのから返ってくるデータ(全5000件)の構造は以下の通り。

[
  {
    "albumId": 1,
    "id": 1,
    "title": "accusamus beatae ad facilis cum similique qui sunt",
    "url": "https://via.placeholder.com/600/92c952",
    "thumbnailUrl": "https://via.placeholder.com/150/92c952"
  },
  {
    "albumId": 1,
    "id": 2,
    "title": "reprehenderit est deserunt velit ipsam",
    "url": "https://via.placeholder.com/600/771796",
    "thumbnailUrl": "https://via.placeholder.com/150/771796"
  },
/****   続く   ****/

今回はタイトル(title)サムネイル(thumbnailUrl)を使用しました。

APIからのデータを受け取るコンポーネントのサンプル

以下画像のようなコンポーネントを作成しました。
ボタンを押すとAPIからデータを取得します。

APIを利用するコンポーネントのサンプル
APIから取得した情報を並べて表示

APIからはJSON形式でたくさんの要素が返ってくるので、map関数で回して要素毎にUIを生成してます。

import React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'
import classes from "./UsePlaceholderAPI.module.css"

const url_photos= 'https://jsonplaceholder.typicode.com/photos/'

export function UsePlaceholderAPI() {

    const [photos,setPhotos] = useState([]);

    // フォトの取得
    const fetchPhotos = useCallback( (e) => {
        fetch(url_photos)
            .then(response => response.json())
            .then(json => setPhotos(json))
    }, []);
    

    return (
    <>
       
        {/* フォトの取得 */}
        <button className={classes.button} onClick={fetchPhotos}>APIからフォト取得</button>

        {/* フォトの表示 */}
        {photos.map(photo => (
            <div key = {photo.id}>
                <h3 className={classes.h3} >Title:{photo.title}</h3>
                <p>thumbnailUrl:{photo.thumbnailUrl}</p>
                <img src={photo.thumbnailUrl} />
                <hr/>
            </div>
        ))}

    </>
    );
  }
  

cssは省略。適当にmargin入れてるだけなので。

スポンサーリンク

さいごに

フロントエンドは画面があるので開発が楽しいですが、表面上だけだと少し物足りなくなります。
JSONPlaceholderのようなものが提供されるおかげで一段深い開発ができるので、ありがたいですね。
今後も活用していきたいです。

以下関連記事。

コメント

タイトルとURLをコピーしました