レンダリング方法

Next.jsではどのような使い分けをするか?

next13.4以降、デフォルトでサーバーコンポーネントを使用されることになった

⇒ 関数コンポーネント内で非同期でデータフェッチすることができるようになった

⇒ 場合によってはuseEffectなどの機能を活用してCSRと使い分けたい場合がある

use client を先頭に指定したことにより、SSRとして扱うべき処理もクライアントコードとみなされるため、画面描画パフォーマンスに影響を与える可能性がある

// このファイルではCSRを使用することを示す記述
// 指定がなければデフォルトでSSRコードとみなされる
'use client' 

import ClientComponent from "./components/ClinetComponent";

export default function SSR() {
    const [state, setState] = useState(undefined);
    useEffect(() => {
        setState('client loaded');
    }, [])

    return (
        <>
            <div>SSR Page</div>
            <div>{state}</div>
        </>
    )
}

対策:CSRで動かしたい処理を別コンポーネントに切り離す

import ClientComponent from "./components/ClinetComponent";

export default function SSR() {
    return (
        <>
            <div>SSR Page</div>
            <ClientComponent />
        </>
    )
}