Next.js 13.4 と新しい app/
ディレクトリを使用したサーバーサイド レンダリングについて学ぼうとしています。私が理解しているところによると、すべてのコンポーネントはデフォルトで server コンポーネントです (つまり、サーバー側でレンダリングされます)。
ただし、'use client'
ディレクティブを使用して、コンポーネントを強制的に client コンポーネントにすることができます。
以下では、単純な「Hello World」コンポーネントを、最初にサーバー コンポーネントとして、次にクライアント コンポーネントとしてセットアップしました。それぞれのケースで、ページのソース コードを比較します。
src/app/page.js
(サービス务器コンポーネント)デフォルト関数 Home() をエクスポート { 戻る ( <メイン>Hello World
メイン> ) }
クローム>查看页面源代网
<頭>次のアプリを作成 <本体> <メイン>Hello World
メイン> ボディ>
src/app/page.js
(客户端组件)'クライアントを使用'; デフォルト関数 Home() をエクスポート { 戻る ( <メイン>Hello World
メイン> ) }
Chrome > 查看页面源代码
Create Next App ボディ> Hello World
ゲスト端末のコンポーネントが HTML をすでに汚染しているため、私たちは考えていますが、「Hello World」は React Root DOM ポイントに似たものであり、基本的には空であると考えています。 div 等にいくつかの HTML を埋め込んでいます。私はここに何か足りませんか?
本体> 頭>
######ここから######
サーバー コンポーネントとクライアント コンポーネントは、静的レンダリング中に異なる方法でレンダリングされます:
クライアント コンポーネントの HTML と JSON は事前にレンダリングされ、サーバーにキャッシュされます。キャッシュされた結果は、ハイドレーションのためにクライアントに送信されます。 サーバー コンポーネントは React によってサーバー上でレンダリングされ、そのペイロードは HTML の生成に使用されます。クライアント側でコンポーネントを混合するためにも同じレンダリング負荷が使用されるため、クライアント側で JavaScript は必要ありません。さて、- サーバー コンポーネントとクライアント コンポーネント
を使用すると、React はクライアント
とサーバーの両方でレンダリングできるようになります。これは、コンポーネント レベルでレンダリング環境を選択できることを意味します。デフォルトでは、app
ルーターはサーバー コンポーネント
を使用するため、サーバー上でコンポーネントを簡単にレンダリングし、クライアントに送信される JavaScript の量を減らすことができます。