IT-Q

一覧データの取得は、どこに書くのが基本ですか。

Server Component の中で直接 await するのが基本です。page.tsx を async にして呼びます。ブラウザとAPIの往復が1回減り、取得用のコードがクライアントに送られません。

面接官が見ているのはApp Router の基本形。useEffect 一択の癖が抜けているか。

よくある答えと、面談でどう見られるか

  • Server Component を async にして、その中で直接 await する
    往復が1回減り、APIキーもクライアントに出ません。
  • Client Component の useEffect の中で fetch する
    動きますが、表示までの往復が増え、loading と error の状態を自前で持つことになります。
  • Route Handler を作って、クライアントから呼ぶ
    外部に口が要るなら妥当ですが、自分の画面に出すだけなら遠回りです。
  • proxy.ts(旧 middleware)で取得してリクエストに載せる
    全リクエストが通る場所なので、全ページが遅くなります。

模範解答

Server Component の中で直接 await します。page.tsx を async にして、その中で fetch なり ORM なりを呼ぶ形です。

useEffect でクライアントから取りに行く形と比べた利点は3つあります。表示までにブラウザ→APIの往復が1回減ること、APIキーやDB接続情報がクライアントに出ないこと、loading / error のフラグを自前で持たなくて済むことです。

なお Server Component では useEffect も useState も使えません。再レンダリングもライフサイクルも無いので、フックの前提が成り立たないためです。そもそも直接 await できるので、必要もありません。