1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

覚えたてのReactとMUIでJSONPlaceholderのデータを表示してみた

Posted at

Udemyで下記React関連のコースを修了:tada:

一通り学んだので、自分でも何かしらのデータを表示するものを作ってみたい!
というわけで、じゃけぇさんのコースの中でも採用されていたJSONPlaceholderがちょうど良さそうだったので、練習用に使ってみました。
ネタがなくて何を作れば良いか困っている方におすすめです。

When to use
JSONPlaceholder is a free online REST API that you can use whenever you need some fake data. It can be in a README on GitHub, for a demo on CodeSandbox, in code examples on Stack Overflow, ...or simply to test things locally.

サイト上の説明によると、GitHubのREADME、CodeSandbox、StackOverflow、そしてローカルでのテスト向けに、無料で利用可能だそうです。

JSONPlaceholderのデータはざっくりと下記のようになっています。
尚、todoやcommentの内容はラテン語か何かで書かれているようです:laughing:

リソース名 件数 内容
users 10 id, name, username, email, address, phone, website, company のテキストデータがあり、addressとcompanyにはさらに詳細データがあります。
posts 100 userId, id, title, body のデータがあり、usersに紐づけられます。
1ユーザーあたり10件。
todos 200 userId, id, title, completed(boolean)のデータがあり、usersに紐づけられます。
1ユーザーあたり20件
albums 100 userId, id, title のデータがあり、usersに紐づけられます。
1ユーザーあたり10件
photos 5,000 albumId, id, title, url(600x600の画像パス), thumbnailUrl(150x150の画像パス) のデータがあり、albumsに紐づけられます。
1アルバムあたり50件
comments 500 postId, id, name, email, body のデータです。
こちらは特に他のデータと紐付けられるIDはありませんでした。

データの取得にはaxiosを利用しました。(これも上記のコースの中で学びました)
axiosインストール後、下記のようにデータを取得することができます。

import { useEffect, useState } from "react";

import axios from "axios";

export const UserList = () => {
  const [users, setUsers] = useState([]);

  useEffect(() => {
    const getData = async () => {
      const res = await axios.get("https://jsonplaceholder.typicode.com/users");
      setUsers(res.data);
    };
    getData();
  }, []);

  return (
    <>
        <ul>
        {users.map((row) => (
            <li key={row.id}>{row.username}</li>
        ))}
        </ul>
    </>
  );
};

コースの中ではChakra UIが使われていたのですが、今回はMUIを使ってみました。
こういったUIフレームワークの色々なComponentsを試してみたい!といった場合にも、JSONPlaceholderのようなデータが用意されていると大変助かります。以下、やってみた画面をご紹介します。

AppBar, Card, Icons

AppBarにアイコンを設置して、各ページへの導線を用意する

色々なアイコンが用意されていて、選ぶのが楽しいです。

Cardに説明文とリンクを載せて並べて表示する

(説明文は自分で適当に書いています。)
レイアウトのためにGridも使いました。こちらのInteractiveのサンプルが分かりやすくて便利です。

Home.png

Table

各データを一覧にして表示してみる

ソート機能をつけたり、行をクリックすると行間に詳細情報を表示する方法もあるようです。
下記ではCompletedがtrueだったらチェックボックスにチェックが入るようにしてみました。
TableWithCheckbox.png

Tabs

各ユーザーのposts, todos, albumsのデータをタブで出し分けてみる

初心者がコンポーネントの分け方やpropsの渡し方を試行錯誤するのにちょうどいい題材といった感じです。

Tabs.png

Avatar

各アルバムに含まれている画像をアイコン風に表示してみる

ユーザーのアイコン表示でよくある見せ方ですね。
AvatarGroup.png

ImageList

アルバムの画像を並べてみる

ただのベタ塗りなので味気ないですが…

ImageList.png

Dialog

アルバムの画像をクリックして拡大表示してみる

簡単にできました。
Dialog.png

Pagination

commentsのデータをページ毎に表示してみる

1つのpostIdにつき5件のコメントデータがあったので、postIdをページ番号に見立てて試してみました。

Pagination.png

以上です

Udemyで動画を見ながら真似して書いている時と違って、ここまでやってみると習得してきている実感が湧いてきます。
講師の方々、お蔭様でここまで出来るようになりました、ありがとうございました!

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?