lit-htmlスタンドアロンの使用

Lit は、LitElement のコンポーネントモデルと、JavaScript テンプレートリテラルベースのレンダリングを組み合わせた使いやすいパッケージです。しかし、Lit のテンプレート部分は lit-html というスタンドアロンライブラリに分割されており、効率的に HTML をレンダリングおよび更新する必要がある場合、Lit コンポーネントモデルの外でも使用できます。

lit-html パッケージは、lit とは別にインストールできます。

主なインポートは htmlrender です。

スタンドアロンの lit-html パッケージには、完全な Lit 開発者ガイドで説明されている次の機能のモジュールも含まれています。

Lit テンプレートは、html タグでタグ付けされた JavaScript テンプレートリテラルを使用して記述されます。リテラルの内容はほとんどプレーンな宣言型の HTML であり、テンプレートの動的な部分を挿入および更新するための式を含めることができます(Lit のテンプレート構文に関する完全なリファレンスについては、テンプレートを参照)。

lit-html のテンプレート式は、DOM の作成や更新を発生させません。これは DOM の記述のみであり、TemplateResult と呼ばれます。実際に DOM を作成または更新するには、TemplateResult と、レンダリング先のコンテナを render() 関数に渡す必要があります。

テンプレートを動的にするには、テンプレート関数を作成します。データが変更されるたびにテンプレート関数を呼び出します。

テンプレート関数を呼び出すと、lit-html は現在の式の値を取得します。テンプレート関数は DOM ノードを作成しないため、高速で安価です。

テンプレート関数は、テンプレートと入力データを含む TemplateResult を返します。これは lit-html を使用する主な原則の 1 つです。つまり、状態の関数として UI を作成することです。

render を呼び出すと、lit-html は、前回のレンダリング以降に変更されたテンプレートの部分のみを更新します。これにより、lit-html の更新は非常に高速になります。

render メソッドは、次のオプションを指定できる options 引数も受け取ります。

  • host: @eventName 構文を使用して登録されたイベントリスナーを呼び出す際に使用する this の値。このオプションは、イベントリスナーをプレーンな関数として指定する場合にのみ適用されます。イベントリスナーをイベントリスナーオブジェクトを使用して指定した場合、リスナーオブジェクトが this の値として使用されます。イベントリスナーの詳細については、イベントリスナー式を参照してください。

  • renderBefore: lit-html がレンダリングする前に、container 内のオプションの参照ノード。デフォルトでは、lit-html はコンテナの最後に追加します。renderBefore を設定すると、コンテナ内の特定の位置にレンダリングできます。

  • creationScope: テンプレートのクローン作成時に lit-html が importNode を呼び出すオブジェクト(デフォルトは document)。これは高度なユースケースのために提供されています。

たとえば、lit-html スタンドアロンを使用している場合、次のようなレンダリングオプションを使用できます。

上記の例では、<header><footer> 要素の間にテンプレートがレンダリングされます。

レンダリングオプションは定数でなければなりません。レンダリングオプションは、後続の render 呼び出し間で変更しないでください

lit-html は、1 つのことに重点を置いています。つまり、HTML のレンダリングです。lit-html が作成する HTML へのスタイルの適用方法は、使用方法によって異なります。たとえば、LitElement のようなコンポーネントシステム内で lit-html を使用している場合、そのコンポーネントシステムで使用されているパターンに従うことができます。

一般的に、HTML のスタイルの適用方法は、Shadow DOM を使用しているかどうかに依存します。

  • Shadow DOM にレンダリングしていない場合は、グローバルスタイルシートを使用して HTML のスタイルを設定できます。
  • Shadow DOM にレンダリングしている場合は、シャドウルート内に <style> タグをレンダリングできます。

レガシーブラウザでのシャドウルートのスタイル設定にはポリフィルが必要です。スタンドアロンの lit-htmlShadyCSS ポリフィルを使用するには、lit-html/polyfill-support.js をロードし、レンダリングされたコンテンツのスコープを設定するために、ホストタグ名を指定した scope オプションを RenderOptions で渡す必要があります。このアプローチは可能ですが、レガシーブラウザで lit-html テンプレートを Shadow DOM にレンダリングするサポートが必要な場合は、LitElement を使用することをお勧めします。

動的なスタイル設定を支援するために、lit-html は要素の class 属性と style 属性を操作するための 2 つのディレクティブを提供します。

  • classMap は、オブジェクトのプロパティに基づいて要素にクラスを設定します。
  • styleMap は、スタイルプロパティと値のマップに基づいて要素にスタイルを設定します。