コース一覧
Next.jsフルスタック:サーバー・データ取得・API
つくる - サーバー取得化

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分

つくる - サーバー取得化

第1章の宿題を回収する

第1章で fleama のソースを表示したとき、商品名がどこにも入っていませんでした。空の入れ物だけが返り、中身はブラウザが後から詰めていたからです。

この章で書いた形なら、そこが変わります。ページの関数がサーバーで動き、データが揃ってから HTML が組み立てられるので、返る時点で商品名が入っています。ソースを表示すると、画面に見えているのと同じ文字がそのまま並びます。

今日やること

残っている useEffect を取り除き、一覧と詳細の両方をサーバー取得にそろえます。

  • app/page.tsx の一覧を async なページにして await fetch で取る
  • app/items/[id]/page.tsx で params から id を取り、その商品を取る
  • どちらのファイルからも useState と useEffect を消す

判定できることとできないこと

プレビューは本物のサーバーを持たないので、ソース表示そのものは見せられません。代わりに2つの角度から確かめます。1つは、サーバーで取った結果がそのまま画面になっていること。もう1つは、書いたコードに useEffect が残っていないことです。

この2つが揃っていれば、本物の Next.js に置いたときに初期 HTML へ中身が入ります。逆にどちらか欠けていると、見た目は同じでもソースは空のままになります。

演習

一覧と詳細をサーバー取得に移し、useEffect を完全に無くします。

ヒント

一覧の書き換えはこの章の最初のレッスンと同じ形です

詳細の props の型は { params: Promise<{ id: string }> } です

リンクの href は変えません。/items/1 の形のままにします

app/items/[id]/page.tsx
layout.tsx
app/page.tsx
mock-api.json
プレビュー

できているか

  • 一覧が5件出ている
  • 一覧から useEffect が消えている
  • 詳細へのリンクが並んでいる
  • 詳細ページにその商品が出る
  • 詳細で params を await して使っている
  • 詳細も useEffect を使わずに取っている
エディタを読み込んでいます