[A-00245] React 1000本ノック (1)

Reactを理解するため、1000本ノックシリーズを開始しました。

実際はReactだけではなく、Next.jsやViteなど様々なReact関連のプロダクトを触っていきます。

Next.js作成コマンド

npx create-next-app@latest [projectName]

fetch APIを使う

下記のfetch関数を使って対象のURLからJSONデータを取得します。

export default async function Page() {
    const data = await fetch('https://api.vercel.app/blog');
    const posts = await data.json();

    return (
       <ul>
        {posts.map((post) => (
            <li key={post.id} >{post.title}</li>
        )
        )}
       </ul>
    );
}

Interfaceを作ってPostsを取得・表示してみる

先ほどは直接JSONの内容を表示しましたが、今度はJSONをPostインターフェースのオブジェクトに格納して表示してみる方法です。

interface Post {
    id: string;
    title: string;
    content: string;
}

export const revalidate = 3600;

export default async function Page() {
    const data = await fetch('https://api.vercel.app/blog');
    const posts: Post[] = await data.json();

    return (
        <main>
            <h1>Blog Posts</h1>
            <ul>
                {posts.map((post) => (
                    <li key={post.id} >{post.title}</li>
                ))};
            </ul>
        </main>
    );
}

useStateの使い方を学ぶ

useStateの使い方をボタンを押すと数が増えるだけのアプリで学習する。

constで2つの変数を宣言するのはcountが変数で、setCountは状態を変化させるイベントみたいな変数として捉えるとわかりやすい

'use client'

import { useState } from "react";

const Practice = () => {
    const [count1, setCount1] = useState(0);
    const [count2, setCount2] = useState(10);
    const [count3, setCount3] = useState(100);

    return (
        <>
        <p>ボタン1を{count1}回</p>
        <button onClick={() => {
            setCount1(count1 + 1);
        }}>ボタン1</button>
        <p>ボタン2を{count2}回</p>
        <button onClick={() => {
            setCount2(count2 + 10);
        }}>ボタン2</button>
        <p>ボタン3を{count3}回</p>
        <button onClick={() =>{
            setCount3(count3 + 100);
        }}>ボタン3</button>
        </>
    );
};

export default Practice;

Appendix

参考文献はこちら

https://zenn.dev/pharmax/articles/ca59d9556468d5

https://commte.net/nextjs-export-type-interface

https://zenn.dev/luvmini511/articles/6c6f69481c2d17

https://qiita.com/tom-takeru/items/d2d5633aec74ca0c5231

https://qiita.com/0xkei10/items/1f01a242804dcd1a27d8

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*