私はWeb開発に不慣れです。最近、カスタム要素v1について多くの議論と話し合いがありました。これにより、独自のカスタム動作を備えた独自の要素を定義したり、Shadow DOMを使用する場合はスコープ付きスタイルを定義したりできます。
this サイトでそれについて学んでいたとき、「カスタム要素の反応」の表が理解できませんでした。 「コンストラクタ」と「connectedCallback」の使用の違いと、「作成またはアップグレード」および「DOMに挿入」という用語について誰かが説明してくれませんか?.
追加情報として、私のカスタム要素の定義は別のファイルにあり、シャドウDOMを使用しています。 HTMLインポートを使用して、要素の定義をメインドキュメントにインポートしました。
ジュビアンがコメントですでに述べたように:
constructor()
は、要素がcreatedのときに呼び出されます。connectedCallback()
は、要素がDOMにアタッチされたとき(後)に呼び出されます。constructor()
の呼び出しはカスタム要素に固有ではなく、HTML要素だけでなく、オブジェクトの作成(通常はnew
演算子を使用して作成)で発生します。
constructor()
呼び出しでは、シャドウDOMを作成できますが、通常のDOM内にノードを追加することはできません。また、属性を追加または設定することもできません。
アップグレードについて:
upgradeは、HTMLコードで宣言された不明なタグが後で定義されたときに発生します(customElements.define()
メソッドによって)。 「不明」要素は「カスタム」要素になります。次に、constructor()
およびconnectedCallback()
メソッドが呼び出されます。
注:要素が作成され(不明として)、定義された場合、アタッチされた場合にのみアップグレードされます。
class CE extends HTMLElement {
constructor() {
super()
console.info( 'constructed' )
}
connectedCallback() {
console.info( 'connected' )
this.innerHTML = 'Hello' //can't be set in constructor()
}
}
B1.onclick = function () {
ce = document.createElement( 'c-e' )
ce.textContent = 'unknown'
}
B2.onclick = function () {
document.body.appendChild( ce )
}
B3.onclick = function () {
customElements.define( 'c-e', CE)
}
<button id=B1>create</button>
<button id=B2>attach</button>
<button id=B3>define</button>
上記のスニペットでさまざまな組み合わせを試してください。