【かすたむえれめんつ】

Custom Elements とは?

最終更新:
💡 独自のHTML要素を登録して、ブラウザに振る舞いを教える

独自のHTML要素をJavaScriptで定義・登録できるWeb標準の仕組み。登録した要素をHTMLやDOM APIから使い、接続や属性の変化などに応じて処理できる。Web Componentsの技術の一つで、Shadow DOMは必要に応じて組み合わせる。

📌 このページのポイント
独自要素を、定義して登録する MyCard HTMLElementを継承 登録 ブラウザ <my-card> customElements.define( "my-card", MyCard) クラスとタグ名を登録 Shadow DOM 必要なら併用 自動では付かない 接続・切断・監視する属性の変化などで ブラウザがコールバックを呼ぶ 接続は繰り返されることもある
ここでは独自タグを作るautonomous custom elementの例を示します。矢印はクラスの登録。Shadow DOMは必要に応じて組み合わせる技術で、登録しただけでは付属しません。
ひよこ ひよこ
Reactのコンポーネントと何が違うの?
ペンギン先生 ペンギン先生
Custom Elementsはブラウザが定義を登録して扱うHTML要素だよ。Reactコンポーネントとは仕組みが違うけど、Reactからカスタム要素を表示することもできる。共有するときは、接続先の属性・プロパティ・イベントの扱いも確認しよう。
ひよこ ひよこ
どうやって作るの?
ペンギン先生 ペンギン先生
独自タグを作る例では、HTMLElementを継承したクラスを定義して、customElements.define("my-component", MyComponent)で登録するよ。HTMLでは<my-component></my-component>と書ける。名前は小文字で始まりハイフンを含むなど、仕様の命名規則に従うんだ。
ひよこ ひよこ
ライフサイクルは?
ペンギン先生 ペンギン先生
代表的にはconnectedCallbackが文書への接続、disconnectedCallbackが切断、adoptedCallbackが別の文書への移動に対応する。attributeChangedCallbackはobservedAttributesで指定した属性を監視するよ。接続は繰り返されることがあるし、状態を保つ移動ではconnectedMoveCallbackを使う仕組みもあるんだ。
ひよこ ひよこ
Shadow DOMも自動で付くの?
ペンギン先生 ペンギン先生
登録するだけでは付かないよ。通常のDOMを使う実装もできる。内部のDOMやスタイルを分けたい場合には、attachShadow()などでShadow DOMを組み合わせるんだ。スタイルを分けることと、外部のコードから秘密を守ることは別だよ。
ひよこ ひよこ
実務で使うライブラリは?
ペンギン先生 ペンギン先生
Litは更新に反応するプロパティやテンプレートなどを備えたライブラリ。StencilはTypeScriptやJSXからカスタム要素を生成するコンパイラだよ。標準の仕組みを直接使うこともできる。作るものや配布先、フレームワークとの接続方法に合わせて選ぼう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Custom Elements」って出てきたら「独自のHTML要素を定義・登録するWeb標準の仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Custom Elements」 = カスタム要素
💬 Custom(独自の)Elements(要素)。HTMLの標準タグと同じように使える独自タグだよ

参考資料

← 用語集にもどる