Dor*_*hen 4 javascript web-component custom-element
我是 Web 组件的新手,我注意到一些示例在自定义元素的构造函数中设置了 dom,而其他示例则在 connectedCallback 中进行设置。由于两者似乎都可以正常工作(尽管我只尝试了 Chrome),我认为主要区别在于用户在 js 中创建元素而不将其附加到页面的情况?
我想这里的主要问题是我是否遗漏了一些其他原因来偏爱一种方法而不是另一种方法。
谢谢。
在 constructor
, 是安全的
在 constructor
,你不被允许(除其他外)
...因为这些在非升级情况下可能不存在,并且在您使用document.createElement('my-custom-element')
或动态创建自定义元素时肯定不会存在new MyCustomElement
。
constructor
在 中 constructor
,您可能不想
document
, window
),因为这些是您应该在组件中清理的侦听器类型(例如,disconnectedCallback
当您的组件在 DOM 中移动时将被调用)。将这些侦听器附加到构造函数中并正确清理它们,disconnectedCallback
一旦您的组件从 DOM 中移除(然后重新添加)或移动到 DOM中,就会导致丢失侦听器。
您需要了解自定义元素生命周期,以免陷入其他明显的陷阱,其中包括:
constructor
并在组件的 中包含这些属性observedAttributes
,请记住这将立即触发attributeChangedCallback
这些属性的 ,即使您的元素尚未连接(即在 DOM 中)。connectedCallback
.在某种程度上,这些最佳实践和规则遵循https://html.spec.whatwg.org/multipage/custom-elements.html#custom-element-conformance,在其他部分,它们与规范中的建议有所不同。
具体来说,由于我上面给出的原因,我不同意以下内容(鉴于侦听器的范围在组件之外)。
通常,构造函数应该用于设置初始状态和默认值,以及设置事件侦听器和可能的影子根。