IT-Q

フォームの送信処理はどう実装しますか。

'use server' を付けた async 関数を form の action に渡します。APIエンドポイントを別途作らずに済み、JSが無効でも送信できる形になります。実体はサーバー上の関数です。

面接官が見ているのはServer Actions を選択肢として持っているか。

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

  • 'use server' を付けた async 関数を form の action に渡す
    Server Function です。API エンドポイントを別途作らずに済みます。
  • Route Handler を作って、クライアントから fetch する
    動きますし、外部から叩かれる口が要るならこちらが正解です。ただし自分の画面から送るだけなら、エンドポイント設計の手間が増えるだけになります。
  • Client Component で状態を持ち、onSubmit の中で API を呼ぶ
    従来型の作りで、間違いではありません。ただし送信中・エラー・成功の状態を自前で持つことになります。面談では「App Router なら他にどう書けるか」を聞かれます。
  • Server Component の中に onSubmit を書く
    Server Component ではイベントハンドラを渡せません。ハンドラは関数なので、クライアントへ送れないためです。

面接官は何を見ているか

  • Server Function('use server')を挙げた
  • API ルートを作らずに済む点に触れた
  • 更新後の再検証まで意識している

模範解答

Server Function を使います。'use server' を付けた async 関数を form の action に渡すと、送信時にサーバー側でその関数が実行されます。

利点は、API エンドポイントを別途作らなくて済むことと、クライアント側で fetch を書いて状態を管理する手間が減ることです。

注意点として、Server Function は更新(ミューテーション)のための仕組みです。公式も「サーバー側の状態を更新するためのもので、データ取得には推奨しない」と明記しています。取得は Server Component で await する形が基本です。

更新したら、表示しているキャッシュを捨てる処理までがセットです。ここを忘れると「保存したのに一覧が変わらない」になります。

ここからどう深掘りされるか

この問いに答えられた場合、面談は次の質問に進みます。