lit-htmlスタンドアロンの使用
Lit は、LitElement のコンポーネントモデルと、JavaScript テンプレートリテラルベースのレンダリングを組み合わせた使いやすいパッケージです。しかし、Lit のテンプレート部分は lit-html というスタンドアロンライブラリに分割されており、効率的に HTML をレンダリングおよび更新する必要がある場合、Lit コンポーネントモデルの外でも使用できます。
lit-html スタンドアロンパッケージ
「lit-html スタンドアロンパッケージ」へのパーマリンクlit-html パッケージは、lit とは別にインストールできます。
npm install lit-html主なインポートは html と render です。
import {html, render} from 'lit-html';スタンドアロンの lit-html パッケージには、完全な Lit 開発者ガイドで説明されている次の機能のモジュールも含まれています。
lit-html/directives/*- ビルトインディレクティブlit-html/directive.js- カスタムディレクティブlit-html/async-directive.js- カスタム非同期ディレクティブlit-html/directive-helpers.js- 命令型DOMアクセスのためのディレクティブヘルパーlit-html/static.js- 静的HTMLタグlit-html/polyfill-support.js- Webコンポーネントポリフィルとのインターフェースのためのサポート(スタイルとlit-htmlテンプレートを参照)
lit-html テンプレートのレンダリング
「lit-html テンプレートのレンダリング」へのパーマリンクLit テンプレートは、html タグでタグ付けされた JavaScript テンプレートリテラルを使用して記述されます。リテラルの内容はほとんどプレーンな宣言型の HTML であり、テンプレートの動的な部分を挿入および更新するための式を含めることができます(Lit のテンプレート構文に関する完全なリファレンスについては、テンプレートを参照)。
html`<h1>Hello ${name}</h1>`lit-html のテンプレート式は、DOM の作成や更新を発生させません。これは DOM の記述のみであり、TemplateResult と呼ばれます。実際に DOM を作成または更新するには、TemplateResult と、レンダリング先のコンテナを render() 関数に渡す必要があります。
import {html, render} from 'lit-html';
const name = 'world';const sayHi = html`<h1>Hello ${name}</h1>`;render(sayHi, document.body);動的データのレンダリング
「動的データのレンダリング」へのパーマリンクテンプレートを動的にするには、テンプレート関数を作成します。データが変更されるたびにテンプレート関数を呼び出します。
import {html, render} from 'lit-html';
// Define a template functionconst myTemplate = (name) => html`<div>Hello ${name}</div>`;
// Render the template with some datarender(myTemplate('earth'), document.body);
// ... Later on ...// Render the template with different datarender(myTemplate('mars'), document.body);テンプレート関数を呼び出すと、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 スタンドアロンを使用している場合、次のようなレンダリングオプションを使用できます。
<div id="container"> <header>My Site</header> <footer>Copyright 2021</footer></div>const template = () => html`...`;const container = document.getElementById('container');const renderBefore = container.querySelector('footer');render(template(), container, {renderBefore});上記の例では、<header> と <footer> 要素の間にテンプレートがレンダリングされます。
レンダリングオプションは定数でなければなりません。レンダリングオプションは、後続の render 呼び出し間で変更しないでください。
スタイルとlit-htmlテンプレート
「スタイルとlit-htmlテンプレート」へのパーマリンクlit-html は、1 つのことに重点を置いています。つまり、HTML のレンダリングです。lit-html が作成する HTML へのスタイルの適用方法は、使用方法によって異なります。たとえば、LitElement のようなコンポーネントシステム内で lit-html を使用している場合、そのコンポーネントシステムで使用されているパターンに従うことができます。
一般的に、HTML のスタイルの適用方法は、Shadow DOM を使用しているかどうかに依存します。
- Shadow DOM にレンダリングしていない場合は、グローバルスタイルシートを使用して HTML のスタイルを設定できます。
- Shadow DOM にレンダリングしている場合は、シャドウルート内に
<style>タグをレンダリングできます。
レガシーブラウザでのシャドウルートのスタイル設定にはポリフィルが必要です。スタンドアロンの lit-html で ShadyCSS ポリフィルを使用するには、lit-html/polyfill-support.js をロードし、レンダリングされたコンテンツのスコープを設定するために、ホストタグ名を指定した scope オプションを RenderOptions で渡す必要があります。このアプローチは可能ですが、レガシーブラウザで lit-html テンプレートを Shadow DOM にレンダリングするサポートが必要な場合は、LitElement を使用することをお勧めします。
動的なスタイル設定を支援するために、lit-html は要素の class 属性と style 属性を操作するための 2 つのディレクティブを提供します。