custom element setup: constructor vs connectedCallback(自定义元素设置:构造函数与连接的回调)
问题描述
我是Web组件的新手,我注意到一些示例在定制元素的构造函数中设置DOM,而另一些示例则在ConnectedCallback中设置。 由于两者似乎都工作得很好(尽管我只尝试了Chrome),我认为主要的区别是用户在js中创建元素而不是将其附加到页面的情况?
我想这里的主要问题是我是否错过了一些其他原因而不是更喜欢一种方法。
谢谢。
推荐答案
自定义元素构造函数的最佳实践和规则
在构造函数中执行哪些操作是安全的
在constructor
中,
- 创建影子根;
- 创建并追加元素*;
- 将事件侦听器附加到这些元素(作用域为您自己的ShadowDOM);
- 创建属性*。
在构造函数中不能做的事情
在constructor
中,不允许(除其他事项外)
- 要读取您事先未创建的任何属性...
- 访问子元素...
...因为这些在非升级情况下可能不存在,并且在使用document.createElement('my-custom-element')
或new MyCustomElement
动态创建自定义元素时肯定不会出现。
在constructor
中做什么是不明智的
在constructor
中,您可能不想
- 将事件侦听器附加到组件影子DOM之外的元素(例如
document
、window
),因为这些侦听器是您应该在组件的disconnectedCallback
(例如,当您的组件在DOM中移动时调用)中清理的那种侦听器。
在构造函数中附加这些侦听器并在disconnectedCallback
中正确清理它们会导致组件从DOM中移除(稍后重新添加)或在DOM中移动时丢失侦听器。
*陷阱和注意事项
您需要了解自定义元素的生命周期,以免陷入其他明显的陷阱,其中包括:
- 如果您在
constructor
中添加属性,并且已将这些属性包括在组件的observedAttributes
中,请记住,这将立即触发这些属性的attributeChangedCallback
,即使您的元素尚未连接(也称为。在DOM)。 - 如果您创建其他自定义元素并将其附加到组件的影子DOM中,请记住这将触发这些组件
connectedCallback
。
具体地说,我不同意以下(鉴于监听程序的作用域在组件之外),原因是我上面给出的原因。
通常,构造函数应用于设置初始状态和默认值以及设置事件侦听器和可能的影子根。
这篇关于自定义元素设置:构造函数与连接的回调的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:自定义元素设置:构造函数与连接的回调


基础教程推荐
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 我什么时候应该在导入时使用方括号 2022-01-01
- 动态更新多个选择框 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01