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 を書くくらいでもよい。