Webコンポーネントを使用したカスタムHTML要素の構築
8320 ワード
任意のフレームワークなしで再利用可能な、カプセル化されたHTML要素を構築想像してください!Webコンポーネントを使用すると、我々は確かにそれを作成することができます!
Webコンポーネントとは
Webコンポーネントは、任意のドキュメントまたはWebアプリケーションで使用できるカスタム、再利用可能でカプセル化されたHTML要素を作成することができますWebプラットフォームAPIのセットです.Webコンポーネントは、3つの異なる技術から成ります.
カスタム要素、カスタムHTML要素を作成し、その動作を定義するJavaScript APIのセット.
シャドウDOMは、JavaScriptとスタイルを特定のコンポーネントにカプセル化するために使用されます.
HTMLテンプレートは、ページロードで未使用のマークアップを宣言するために使用されますが、実行時にインスタンス化することができます.
カスタム要素
カスタム要素はWebコンポーネントの基礎です.と
CustomElemets
APIは、所望の動作とロジックに基づいて新しいHTML要素を作成しています.カスタム要素を構築するには、VUEでコンポーネントを構築したり、フレームワークの風味を挿入したり、フレームワークを必要とせずに挿入したりするのと似ています.これらのカスタム要素は、HTMLまたはWebアプリケーションで直接任意のドキュメントで使用できます.Webコンポーネントを使用するもう一つの利点は、これらのカスタム要素がブラウザによってサポートされているため、それらは(フレームワークとは対照的に)廃止されないことです.
カスタム要素を構築するには、JavaScriptクラスを拡張する必要があります
HTMLElement
クラス名をタグ名で定義します.カスタム要素の基本的なバージョン:この例が進んでいないという事実にもかかわらず、それは起動ブロックとして使われるのを許します.JavaScriptクラスの拡張
HTMLElement
コンポーネントをブラウザで登録できるようにします.ドキュメントから使用するには、カスタムHTML要素をタグで定義することが重要です.タグの定義はcustomElements.define('hello-world', HelloWorld)
. これらの手順を実行した後、我々は、カスタムの要素を構築し、任意のドキュメントで使用する準備が簡単に書くだけで<hello-world></hello-world>
.その上、拡張
HTMLElement
HTML要素によって使用されるAPIへのアクセスを許可します.例えば、ライフサイクルイベント.公開された場合、ライフサイクルイベントconnectedCallback
コンポーネントがDOMに挿入されたときに実行されます.connectedCallback
最初のコンテンツを要素に追加したり、コンポーネントにレンダリングするデータを取得するための適切な場所です.注:カスタム要素は常にタグ名にダッシュを持ちます
my-component
, hello-world
or whats-up
. ブラウザのベンダーは、タグ名の競合を避けるためにHTMLタグにダッシュを使わないようにしました.HTMLテンプレート
HTMLテンプレートを使用すると、後で実行時にインスタンス化されるHTMLを定義します.
<template>
<p>Hello world</p>
</template>
上記のコードスニペットは、テンプレートの内容がブラウザに表示されない結果、空のページが表示されます.この強力な手法で、DOMにHTMLを定義して保存し、必要に応じてコンテンツを表示できます.テンプレートの内容を表示するにはJavaScriptを使用する必要があります. const template = document.querySelector('template');
const node = document.importNode(template.content, true);
document.body.appendChild(node);
テンプレートをDOMから取得することから始め、次にテンプレートをnode
変数使用importNode
そして最後に挿入したnode
DOMに.The
importNode
テンプレートの内容をコピーし、その結果、ドキュメントのいくつかの場所で再利用できます.実行後、DOMは以下のようになります.<template>
<p>Hello world</p>
</template>
<p>Hello world</p>
テンプレートに関する素晴らしい側面は、どんなHTML、スタイルまたはスクリプトも含む可能性です.結果として、テンプレートはコンポーネントのスタイルを整える良い場所です.<template id="counter">
<style>
button {
background-color: red;
color: white;
padding: 4px;
}
</style>
<button>Click me</button>
<span id="times">0</span>
</template>
影ドム
DOM(Document Object Model)はHTML文書の構造を表している.DOMは親の子関係を持つドキュメントをモデル化するツリー構造を持っています.
DOM APIはカプセル化をサポートしていません.この特徴は再利用可能で、カプセル化されたカスタム要素を作成することを難しくします.
しかし、カプセル化は影DOMで可能です、そして、カスタム要素にJavaScriptとスタイルを使用するのにアクセス可能です.シャドウDOMを作成するとき、1つのDOM要素にサブツリーが接続されます.新しく作成された影DOMサブツリーは、ドキュメントの残りの部分からカプセル化され、シャドウDOMサブツリーはドキュメントの残りの部分に影響を与えません.
カプセル化を除いて、DOMと影DOMのAPIは同様に働きます.その他の機能
querySelector
, textContent
, getElementById
APIからの等はまだ使用できます.これはシャドウDOMがカスタム要素のルートにどのように接続されているかを例証します
this.attachShadow({mode: 'open'})
. 現在生成されたShadow DOMは、JavaScript、HTML、およびスタイリングをコンポーネント内にカプセル化します.<template id="counter">
<style>
button {
background-color: red;
color: white;
padding: 4px;
}
</style>
<button>Click me</button>
<span id="times">0</span>
</template>
<my-counter>
#shadow-root
<style>
button {
background-color: red;
color: white;
padding: 4px;
}
</style>
<button>Click me</button>
<span id="times">0</span>
</my-counter>
コンポーネントをレンダリングした後、DOMの最終結果を現在の例のように概説します.ラッピング
任意のスパフレームワークを使用せずに、我々は世界中のユーザーに大きな利点をカプセル化、再利用可能なWebコンポーネントを作成することができます.
Web開発がますます複雑になることを考えると、Webプラットフォームでより多くの開発を投資するのは妥当です.この観点から、私はWebコンポーネントは、Vueや反応などのスパフレームワークに大きな補完であると考えています.彼らはお互いを置き換えることはありませんが、任意のフレームワークなしで、これらのカスタムHTML要素を構築することは非常に適しています.
読書ありがとう!
Reference
この問題について(Webコンポーネントを使用したカスタムHTML要素の構築), 我々は、より多くの情報をここで見つけました https://dev.to/mstamstrom/building-custom-html-elements-with-web-components-4lbテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol