TL;DR

use client は、すべての Client Component に書くものではない。サーバで実行されるコードとクライアントで実行されるコードの「境界」を宣言するものである。

仕組み

‘use client’ でマークされているファイルがサーバコンポーネントからインポートされた場合、互換性のあるバンドラは当該モジュールのインポートを、サーバで実行されるコードとクライアントで実行されるコードの境界として扱います。

use client を宣言したファイルをルートとするサブツリー全体が、クライアント側のコードになる。そのため、必要な場所で必要に応じて宣言すればよい。

例

onClick イベントハンドラを使うコンポーネントの例。

"use client";
 
export function LikeButton({ photoId }: { photoId: string }) {
  return <button onClick={() => ...}>いいね</button>;
}

LikeButton の親コンポーネントは Server Component である。もし親コンポーネントが Client Component なら、このコンポーネントの use client は不要になる。

自分の理解

エラーで怒られたときに初めて use client を書くくらいでもよい。

関連

出典