Lit SSR クライアントの使用

このパッケージは、Lit Labs の実験的パッケージファミリーの一部です。本番環境での Labs ソフトウェアの使用に関するガイダンスについては、Lit Labs のページを参照してください。

Lit SSR は、JavaScript なしでブラウザが解析および描画するための静的 HTML を生成します。(宣言的シャドウ DOM をサポートしていないブラウザでは、シャドウ DOM を利用するように作成された Lit コンポーネントに JavaScript ポリフィルが必要になります。)静的なコンテンツを含むページの場合、これだけで十分です。ただし、ページコンテンツが動的であり、ユーザーインタラクションに応答する必要がある場合は、JavaScript がそのリアクティビティを再適用する必要があります。

クライアント側でそのリアクティビティを再適用する方法は、スタンドアロンの Lit テンプレートをレンダリングしているか、Lit コンポーネントを利用しているかによって異なります。

Lit テンプレートの「ハイドレーション」とは、Lit テンプレートの式を、DOM 内で更新する必要があるノードに再関連付けし、イベントリスナーを追加するプロセスです。Lit テンプレートをハイドレートするには、@lit-labs/ssr-client パッケージで hydrate() メソッドが提供されます。サーバーでレンダリングに使用したのと同じテンプレートとデータを使用して、render() を使用してサーバーレンダリングされたコンテナを更新する前に、まずそのコンテナに対して hydrate() を呼び出す必要があります。

Lit コンポーネントにリアクティビティを再適用するには、カスタム要素の定義をロードしてアップグレードし、ライフサイクルコールバックを有効にして、コンポーネントのシャドウルート内のテンプレートをハイドレートする必要があります。

アップグレードは、カスタム要素を登録するコンポーネントモジュールをロードするだけで実現できます。これは、ページのすべてのコンポーネント定義のバンドルをロードすることで行うことも、必要に応じて定義のサブセットのみがロードされるより洗練されたヒューリスティックに基づいて行うこともできます。LitElement シャドウルート内のテンプレートがハイドレートされるようにするには、@lit-labs/ssr-client/lit-element-hydrate-support.js モジュールをロードします。これにより、宣言的シャドウ DOM でサーバーレンダリングされたことを検出すると、LitElement が自動的に自身をハイドレートするためのサポートがインストールされます。ハイドレーションサポートが適切にインストールされるように、このモジュールは、lit モジュール(lit をインポートするコンポーネントモジュールを含む)をロードする前にロードする必要があります。

Lit コンポーネントがサーバーレンダリングされると、そのシャドウルートの内容は、宣言的シャドウルート としても知られる <template shadowroot> 内に出力されます。宣言的シャドウルートは、JavaScript を必要とせずに HTML が解析されると、その内容をテンプレートの親要素のシャドウルートに自動的にアタッチします。

すべてのブラウザが宣言的シャドウ DOM サポートを含むまで、ページにインライン化できる非常に小さなポリフィルを利用できます。これにより、JavaScript が有効になっているすべてのブラウザで今すぐ SSR を使用でき、他のブラウザに機能がロールアウトされるにつれて、JavaScript を使用しないユースケースに段階的に対応できます。template-shadowroot ポリフィル の使用法については、以下で説明します。

@lit-labs/ssr-client/lit-element-hydrate-support.js のロード

「@lit-labs/ssr-client/lit-element-hydrate-support.js のロード」へのパーマリンク

これは、コンポーネントモジュールと lit ライブラリの前にロードする必要があります。

例えば

コードを バンドル している場合は、@lit-labs/ssr-client/lit-element-hydrate-support.js が最初にインポートされていることを確認してください

以下の HTML スニペットには、レイアウトシフトを防ぐために、ポリフィルがロードされるまで本文を非表示にするオプションの戦略が含まれています。

この例は、@lit-labs/ssr-client/lit-element-hydrate-support.jstemplate-shadowroot ポリフィルの両方のロードを組み合わせ、クライアント側でハイドレートする SSRed コンポーネントを持つページを提供する戦略を示しています。

Koa サーバーでの Lit SSR