コース一覧
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分

キャッシュのきほん

2回目はどこから返るか

速いのには理由がある

サーバーで取ったデータは、そのつど取り直しているとは限りません。Next.js は取得の結果をためておき、同じ取得なら使い回します。だから2回目以降の表示が速くなります。

ためておくのは便利ですが、そのままだと困る場面もあります。出品したばかりの商品が一覧に出てこない、売り切れたのに販売中のままになる。fleama で起きたら困るのはこちらのほうです。

取り直し方を書き分ける

どう扱うかは fetch の2つ目の引数で指定します。よく使うのは次の2つです。

TypeScript (JSX)

const fresh = await fetch("/api/items", { cache: "no-store" }); const list = await fetch("/api/items", { next: { revalidate: 60 } });

cache: "no-store" は「ためない」という指定です。開かれるたびに必ず取り直します。在庫や価格のように、古い値を見せてはいけないものに使います。

next: { revalidate: 60 } は「60秒たったら取り直す」という指定です。多少古くてもよいものに向いていて、アクセスが増えても取得の回数が増えません。

選び方の目安

迷ったときは、古い値が出たときに誰が困るかを考えます。

  • 買おうとした商品が売り切れていた、は困るので no-store
  • おすすめの並び順が1分前のまま、は困らないので revalidate

全部を no-store にすると、せっかくの速さが消えます。逆に全部ためると、更新が反映されないアプリになります。1画面ずつ決めるのが確実です。

演習

一覧と新着で、取り直しの指定を書き分けます。

ヒント

fetch の2つ目の引数はオブジェクトです。fetch(url, { cache: "no-store" }) の形になります

revalidate は next の中に入れます。fetch(url, { next: { revalidate: 60 } }) です

バッグは1件だけですが、返ってくるのは配列なので map で並べます

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

できているか

  • 一覧は今までどおり出ている
  • 新着のバッグが出ている
  • 新着を fresh-row で並べている
  • 毎回取り直す指定を書いている
  • 一定時間で取り直す指定を書いている
エディタを読み込んでいます