Next + React Query で SNS サービスを作成する
React19 & Next15 & ReactQuery5 & Next Auth5 & MSW2 & socket.io4 & zustand 스택을 사용하여 Twitter(X.com)와 유사한 SNS 서비스를 만들어보겠습니다. 마지막으로 검색 엔진 최적화를 위한 SSR까지!
受講生 3,398名
難易度 中級以上
受講期間 無制限

Next 15 関連映像制作ガイド & SSR + SEO, Streaming, Suspense 関連整理
こんにちは。ゼロ秒です。
すぐにリアクト19、Next 15が出てくるようですが、12月中に正式版が出たら講義政策通り映像追加制作して上げます。既存に混乱していた部分も大挙再撮影予定です(next-auth、Streamingのようなもの)。
Streaming、Suspenseに関してお問い合わせが多いので(通常はSSR、SEOのために導入されますか?) 以下にまとめてみました。もっと気になる点があれば質問を残してください。
ありがとうございます。
チョ・ヒョンヨンの夢。
はじめに:一度講義のためにSSRを適用したことを示しましたが、おすすめの投稿リストのようなものはSSRする必要も、リストに対するSEOも必要ありません。毎回投稿が変わるから。個別の投稿ページ(/post/[id])のようなものだけSEO適用すること。
loading.tsxなしでprefetchがある場合
唯一のコンテンツSSRになるケース
SSRになるがprefetchが終わってこそ画面が見えるのでユーザーが苦しくなることがある
loading.tsxがなく、useSuspenseQueryのみがある場合
fallback部分がないので無限リクエストを送る(使用X)
https://github.com/TanStack/query/issues/6116#issuecomment-1904051005 で解決可能
loading.tsxでprefetchがある場合
loading.tsxが開いて3秒後に投稿が表示されます。したがって、SSRではありません
metadataやgenerateMetadataにSEO情報を入れなければならない
loading.tsxがありますが、Suspenseももう1つあり、prefetchはある場合
Suspense fallbackが開いて3秒後に投稿が浮かぶ。したがって、SSRはありません
コンテンツSSRなし。 metadataやgenerateMetadataにSEO情報を入れなければならない
loading.tsxがあり、prefetchがない場合
コンテンツSSRなし。 metadataやgenerateMetadataにSEO情報を入れなければならない
isPending: true の場合、ロードを表示するように直接コーディングする必要がある
ここまで知ることができる点:loading.tsxもSuspenseの一種であり、SuspenseはprefetchQueryやuseSuspenseQueryがある場合に動作する。
loading.tsxとprefetchQueryの中間にSuspenseがある場合は、中間が機能します。その理由は loading.tsx も Suspense で Suspense 構造が loading.tsx->中間 Suspense->prefetchQuery なら prefetchQuery は中間 Suspense にかかります。
loading.tsx、Suspense + useQuery、prefetchがない場合
Loading.tsxは動作せず、Suspenseは動作しません。 isPending: true の読み込みが表示される
loading.tsx、Suspense + useSuspenseQuery、prefetchがない場合
Loading.tsx 動作せず Suspense fallback の読み込みが表示される
サーバーで1回、フロントで1回合計2回リクエストするので、非効率
loading.tsxがあり、SuspenseなしでuseSuspenseQueryを書く場合
loading.tsxの言葉。
サーバーで1回、フロントで1回合計2回リクエストするので、非効率
結論:
SSRが完全に完全になりたい場合は、loading.tsx&別途SuspenseなしでprefetchQueryのみを使用してください
useSuspenseシリーズの問題なので書かないでください
SEOをmetadataに置き換えることができる場合は、 Suspenseを置いてprefetchQueryまたはSuspenseなしでuseQuery + isPendingローダーを書くだけです。前者はサーバーからインポートするもので、後者はクライアントからインポートするもの。 SSRもしないのに前者にする理由がないので、後者のおすすめ
loading.tsxを書くか別のSuspenseを置くかを選択する基準:Loading.tsxはページ全体をロードするので、部分だけをロードしたい場合は別のSuspenseを使う
layout.tsxではSuspenseを食べません




