自定义元素的生命周期回调包括connectedCallback、disconnectedCallback、attributeChangedCallback和adoptedCallback。connectedCallback在元素插入DOM时调用,适合初始化操作如挂载Shadow DOM、绑定事件;disconnectedCallback在元素移除时执行,用于清理定时器、解绑事件等资源;attributeChangedCallback在观察的属性变化时触发,需通过observedAttributes定义监控列表,可响应属性更新;adoptedCallback在元素被迁移到新文档时调用,适用于跨文档处理。正确使用这些回调能有效管理组件状态与资源,避免内存泄漏,提升性能。

自定义元素(Custom Elements)是 Web Components 规范的一部分,允许开发者定义自己的 HTML 标签,并通过 JavaScript 控制其行为。在使用自定义元素时,理解其生命周期回调函数至关重要,它们让你能在元素的不同阶段执行逻辑,实现高效的初始化、更新和清理。
connectedCallback:元素插入 DOM 时触发
当自定义元素被添加到文档 DOM 中时,connectedCallback 会被调用。这是初始化组件的最佳时机,比如绑定事件监听器、渲染模板或获取远程数据。
常见操作包括:
- 将 Shadow DOM 挂载到元素上
- 设置内部状态或属性
- 开始监听事件或启动定时器
注意:该方法可能被多次调用,因为元素可以被反复添加和移除,因此需避免重复初始化。
立即学习“Java免费学习笔记(深入)”;
disconnectedCallback:元素从 DOM 移除时触发
当元素被从文档中移除时,disconnectedCallback 执行。这里适合做资源清理工作,防止内存泄漏。
建议在此处理:
- 清除事件监听器
- 取消定时器或动画帧
- 断开 WebSocket 或其他连接
若未及时解绑资源,即使元素不可见,JavaScript 仍可能持有引用,导致性能问题。
attributeChangedCallback:属性变化时触发
当元素的观察属性(observed attributes)发生变化时,会调用 attributeChangedCallback。要启用此回调,必须静态定义 observedAttributes 方法,返回一个字符串数组,列出需要监控的属性名。
示例:
static get observedAttributes() {
return ['label', 'disabled'];
}
attributeChangedCallback(name, oldValue, newValue) {
if (oldValue === newValue) return;
this[name] = newValue;
// 可触发 UI 更新
}
该回调在属性设置、修改或移除时都会触发(除非值未变)。注意:仅支持字符串类型,复杂数据需自行解析。
adoptedCallback:元素被移动到新文档时调用
当自定义元素通过 document.adoptNode() 被迁移到另一个 document 时,adoptedCallback 被触发。这种情况较少见,多用于 iframe 或多文档环境。
可用于:
- 重新绑定跨文档事件
- 更新对宿主文档的引用
大多数应用中可留空,但了解其存在有助于构建更健壮的组件。
基本上就这些。掌握这四个生命周期方法,就能有效管理自定义元素的状态与资源。关键是在合适的时间点做正确的事:连接时初始化,断开时清理,属性变时响应,跨文档时适配。不复杂但容易忽略细节。










