サーバーで動く部品

動く場所が2つある

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

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

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

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

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

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

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

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

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

だから先に仕分けをする

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

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

演習

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

ヒント

layout.tsx
page.tsx
プレビュー

できているか

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