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
。
具体地说,我不同意以下(鉴于监听程序的作用域在组件之外),原因是我上面给出的原因。
通常,构造函数应用于设置初始状态和默认值以及设置事件侦听器和可能的影子根。
这篇关于自定义元素设置:构造函数与连接的回调的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:自定义元素设置:构造函数与连接的回调


- 400或500级别的HTTP响应 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 失败的 Canvas 360 jquery 插件 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Fetch API 如何获取响应体? 2022-01-01