React 入門
TypeScript コメント掲示板アプリの開発
fetch による API からのデータ取得と useEffect
いよいよ API に接続をしてコメント一覧データを取得します.まずは Fetch API(fetch
関数)を使った API コールを試します.Fetch API は Web API の一種で,これを使うとサーバからデータを取得することができます.ただし,fetch
関数は非同期処理になることに注意が必要です.
まず,ここページを参照して API サーバが起動し,API からレスポンスが得られる状態であることを確認してください.
プログラムの先頭で useEffect
をインポートします.
src/components/CommentListPage.tsx(抜粋)
import { useState, useEffect } from 'react';
fetch(url)
によって与えられた URL に GET リクエストを送信します.API からのレスポンスは res.json()
によって JSON 形式(つまり JavaScript のオブジェクト形式)に整えられ,console.log(json)
によってブラウザのコンソールに表示されます(まだ画面には反映されません).もしも API へのリクエストで何らかのエラーが発生した場合には .catch()
のコードが実行されます.
src/components/CommentListPage.tsx(抜粋)
useEffect(() => {
const url = "http://127.0.0.1:8000/comments/";
fetch(url)
.then((res) => res.json())
.then((json) => console.log(json))
.catch(() => console.log("error"));
}, []);
また,fetch(url)
の処理は useEffect()
関数の中で呼び出されていることにも注意してください.この useEffect()
は React のフックのひとつです.useEffect()
はコンポーネントの(再)描画,破棄のタイミングで処理を実行するためのフックで,次のような構文です.
useEffect(()=>{描画時に実行する処理}, 依存する変数);
依存する変数に空配列 []
を渡すことで,コンポーネントの初期描画時のみ処理が実行されることになります.初回描画時に実行されるのが4行目から6行目の処理になります.このように API へのコールを useEffect
でフックすることで,無駄な通信を減らすことができるようになります.
もしも,useEffect
を使わずに次のようにすると,読み込み時だけでなく,投稿や削除のたびに API がコールされることに注意してください.
src/components/CommentListPage.tsx(抜粋)
// useEffect(() => {
const url = "http://127.0.0.1:8000/comments/";
fetch(url)
.then((res) => res.json())
.then((json) => console.log(json))
.catch(() => console.log("error"));
// }, []);