コース一覧
Next.jsフルスタック:サーバー・データ取得・API
asyncコンポーネント

Next.jsフルスタック:サーバー・データ取得・API

Server ComponentsとClient Components、use client、サーバーfetch、asyncコンポーネント、動的ルート、params、notFound、キャッシュ、Route Handler、GET・POST API、Server Actions、フォームを扱う全24レッスンのフルスタックコースです。fleamaの商品取得と出品機能をNext.js内へ実装します。

1
Server / Client Components
01. サーバーで動く部品10分
02. Server Components15分
03. use clientの宣言15分
04. どちらに置くか15分
05. 境界をまたぐ合成15分
06. 境界の設計15分
07. つくる - 部品の仕分け20分
08. 第4章クイズ15分
2
データ取得と動的ルート
01. サーバーでfetch15分
02. asyncコンポーネント15分
03. 動的ルート15分
04. paramsを受け取る15分
05. notFoundで404にする15分
06. キャッシュのきほん10分
07. 検索をサーバーで15分
08. つくる - サーバー取得化20分
09. 第5章クイズ15分
3
API Routesとフォーム
01. Route Handler15分
02. GET APIを作る15分
03. POST APIを作る15分
04. Server Actionsの触り15分
05. フォーム実装15分
06. つくる - 受け口の完成20分
07. 第6章クイズ15分

asyncコンポーネント

部品の中で await を並べる

await は1回だけではない

前回のページは await fetch を1つ書きました。書ける場所は1つに限られていません。ページの関数の中なら、return の前にいくつでも await を並べられます。

TypeScript (JSX)

export default async function HomePage() { const listRes = await fetch("/api/items"); const items = await listRes.json(); const pickupRes = await fetch("/api/items/2"); const pickup = await pickupRes.json(); return <div>{pickup.title}</div>; }

普通の関数と同じ読み方でよい

ここが Next.js のページの気楽なところです。上から順に読めば何をしているか分かります。取得が2つあれば2行、3つあれば3行になるだけで、順番も分岐も普通の JavaScript のままです。

ブラウザ側で同じことをすると、状態が2つ、useEffect が2つ、読み込み中の判定が2つに増えていきました。取得が増えるほど読みにくくなっていたのは、非同期を状態で表そうとしていたからです。

気を付けること

await を縦に並べると、上の取得が終わってから下の取得が始まります。互いに関係のない取得なら、待ち時間がそのぶん足し算になります。

関係が無いと分かっているときは Promise.all でまとめて待てます。今日は形を覚えるところまでにして、まずは縦に並べる書き方を身に付けます。

演習

一覧に加えて、注目商品の詳細を await で取って表示します。

ヒント

2つ目の取得も const で受けます。res という名前がぶつかるので listRes と pickupRes のように分けます

1件だけ返ってくるので、map は要りません

価格の表示は一覧と同じく {pickup.price} 円 の形でよいです

layout.tsx
page.tsx
mock-api.json
プレビュー

できているか

  • 一覧は今までどおり出ている
  • 注目商品の名前が出ている
  • 注目商品の価格が出ている
  • 2つ目の取得を書いている
エディタを読み込んでいます