コース一覧
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つある

React実践までは、書いたコードが動く場所は1つでした。ブラウザです。ページを開くと JavaScript が届き、ブラウザの中で部品が組み立てられ、そこで初めて画面になります。

Next.js では場所が2つになります。サーバーとブラウザです。同じ JSX を書いていても、その部品がどちらで動くかで、できることが変わります。

見分けるいちばん簡単な方法

自分のパソコンで開発サーバーを動かしているとき、部品の中に console.log("ここ") を1行入れてみます。

TypeScript (JSX)

export default function ItemList() { console.log("ItemList が動いた"); return <ul>...</ul>; }

このログがターミナルに出たなら、その部品はサーバーで動いています。ブラウザの開発者ツールのコンソールに出たなら、ブラウザで動いています。両方に出ることもあります。この1行だけで、自分の書いた部品がどちらの世界にいるかが分かります。

場所が違うと、できることが変わる

サーバーで動く部品は、データベースを直接読めます。API の鍵のような、他人に見られては困る文字も安全に扱えます。そのかわり、押されたことに反応する仕組みは持てません。ボタンを押すのはブラウザの中の出来事だからです。

ブラウザで動く部品はその逆です。クリックも入力も受け取れますし、useState で値を持てます。そのかわり、書いたコードは全部ブラウザに届くので、鍵は置けません。

だから先に仕分けをする

実際にコードを移す前に、部品ごとに「どちらで動くべきか」を決めておきます。判断のもとになるのは1つだけで、押す・入力する・値を持ち続ける、のどれかがあるかです。あるならブラウザ、無いならサーバーです。

次のレッスンから、この仕分けを実際のコードで表現していきます。

演習

fleama の部品を、サーバーとブラウザに仕分ける表を作ります。

ヒント

{ part: "ItemList", where: "server", why: "並べるだけだから" } の形を並べます

押す・入力する・値を持ち続ける、のどれかがあれば client です

表示するだけの部品は server で足ります

layout.tsx
page.tsx
プレビュー

できているか

  • 仕分け表が5行以上ある
  • 一覧部品の行がある
  • カード部品の行がある
  • カートボタンの行がある
  • 検索ボックスの行がある
  • サーバーで動かす部品を挙げている
  • ブラウザで動かす部品を挙げている
  • 理由の欄を埋めている
エディタを読み込んでいます