Custom Elements 与 Web Component 生命周期的区别

阅读时长 11 分钟读完

自从 Web Components 技术被提出,前端开发变得更加灵活和可维护。其中 Custom Elements 是 Web Components 的一部分,能够让开发者更加轻松地创建自定义的 HTML 元素,但是 Custom Elements 和 Web Component 生命周期的区别是什么呢?今天我们就来详细探讨一下它们之间的区别。

Custom Elements 生命周期

Custom Elements 是一种可以创建自定义 HTML 元素的技术,它有着自己独特的生命周期:

constructor()

当 Custom Element 被创建时,它的构造函数会被调用。在构造函数中,你可以完成元素的一些初始设置,例如添加内部的 DOM 结构,绑定事件等。

-- -------------------- ---- -------
----- --------- ------- ----------- -
  ------------- -
    --------
    -- ---------
    ----- ------ - ------------------------ ---------
    ----- --- - ------------------------------
    ------------------------
    -- ----
    ------------------------------ -- -- -
      ------------------ ---------
    ---
  -
-
展开代码

connectedCallback()

当 Custom Element 被插入到文档中时,它的 connectedCallback 生命周期函数会被调用。在这个函数中,你可以完成元素的一些初始化工作。

-- -------------------- ---- -------
----- --------- ------- ----------- -
  ------------- -
    --------
    -- ---
  -
  ------------------- -
    -- -----
    ---------------------- --- ---- -------- ---- --- -------
  -
-
展开代码

disconnectedCallback()

当 Custom Element 从文档中移除时,它的 disconnectedCallback 生命周期函数会被调用。在这个函数中,你可以清理元素的一些工作,例如取消一些事件绑定等。

-- -------------------- ---- -------
----- --------- ------- ----------- -
  ------------- -
    --------
    -- ---
  -
  ---------------------- -
    -- ----
    ---------------------- --- ---- ------- ---- --- -------
  -
-
展开代码

attributeChangedCallback()

当 Custom Element 的属性值发生变化时,它的 attributeChangedCallback 生命周期函数会被调用。在这个函数中,你可以根据不同的属性做出不同的反应。

-- -------------------- ---- -------
----- --------- ------- ----------- -
  ------------- -
    --------
    -- ---
  -
  ------ --- -------------------- -
    ------ ---------
  -
  ------------------------------ --------- --------- -
    -- ------------
    -- ----- --- ------- -
      ---------------------- ------- ------- ---- ----------- -- --------------
    -
  -
-
展开代码

Web Component 生命周期

Web Component 是由 Custom Elements、Shadow DOM、HTML Templates 和 HTML Imports 组成的技术集合。因此,Web Component 也有着独特的生命周期。

createdCallback()

当 Web Component 被创建时,它的 createdCallback 生命周期函数会被调用。在这个函数中,你可以完成元素的一些初始化工作。

-- -------------------- ---- -------
----- --------- ------- ----------- -
  ------------- -
    --------
    -- ---
  -
  ----------------- -
    -- -----
    ---------------------- --- ---- -----------
  -
-
展开代码

attachedCallback()

当 Web Component 被插入到文档中时,它的 attachedCallback 生命周期函数会被调用。在这个函数中,你可以完成元素的一些初始化工作。

-- -------------------- ---- -------
----- --------- ------- ----------- -
  ------------- -
    --------
    -- ---
  -
  ------------------ -
    -- -----
    ---------------------- --- ---- -------- ---- --- ------------
  -
-
展开代码

detachedCallback()

当 Web Component 从文档中移除时,它的 detachedCallback 生命周期函数会被调用。在这个函数中,你可以清理元素的一些工作,例如取消一些事件绑定等。

-- -------------------- ---- -------
----- --------- ------- ----------- -
  ------------- -
    --------
    -- ---
  -
  ------------------ -
    -- ----
    ---------------------- --- ---- ------- ---- --- ------------
  -
-
展开代码

attributeChangedCallback()

当 Web Component 的属性值发生变化时,它的 attributeChangedCallback 生命周期函数会被调用。在这个函数中,你可以根据不同的属性做出不同的反应。

-- -------------------- ---- -------
----- --------- ------- ----------- -
  ------------- -
    --------
    -- ---
  -
  ------ --- -------------------- -
    ------ ---------
  -
  ------------------------------ --------- --------- -
    -- ------------
    -- ----- --- ------- -
      ---------------------- ------- ------- ---- ----------- -- --------------
    -
  -
-
展开代码

区别

可以看出,Custom Elements 生命周期和 Web Component 生命周期之间并没有太大的区别,只是名称不同而已。

Custom Elements 生命周期:

  • constructor()
  • connectedCallback()
  • disconnectedCallback()
  • attributeChangedCallback()

Web Component 生命周期:

  • createdCallback()
  • attachedCallback()
  • detachedCallback()
  • attributeChangedCallback()

学习和指导意义

对于开发者来说,了解 Custom Elements 和 Web Component 生命周期的区别是很有意义的。首先,它可以让你更加清楚地了解 Web Components 技术的使用和原理。其次,它可以帮助你更加深入地理解前端开发的本质,以及如何构建更好的、有趣的网站。

最后,我们来看一下一个完整的 Custom Element 和 Web Component 的代码示例:

-- -------------------- ---- -------
-- ------ -------
----- ------------- ------- ----------- -
  ------------- -
    --------
    -- ---------
    ----- ------ - ------------------------ ---------
    ----- --- - ------------------------------
    ------------------------
    -- ----
    ------------------------------ -- -- -
      ------------------ ---------
    ---
  -
  ------------------- -
    -------------------------- --- ---- -------- ---- --- -------
  -
  ---------------------- -
    -------------------------- --- ---- ------- ---- --- -------
  -
  ------ --- -------------------- -
    ------ ---------
  -
  ------------------------------ --------- --------- -
    -- ----- --- ------- -
      ---------------------- ------- ------- ---- ----------- -- --------------
    -
  -
-

-- --- ---------
----- ------------ ------- ----------- -
  ------------- -
    --------
    ----- ------ - ------------------------ ---------
    ----- -------- - ---------------------------------------
    ----- -------- - ---------------------------------
    -----------------------------
    ------------------------------ -- -- -
      ------------------ ---------
    ---
  -
  ------------------- -
    ------------------------- --- ---- -------- ---- --- ------------
  -
  ------------------ -
    ------------------------- --- ---- ------- ---- --- ------------
  -
  ------ --- -------------------- -
    ------ ---------
  -
  ------------------------------ --------- --------- -
    -- ----- --- ------- -
      ---------------------- ------- ------- ---- ----------- -- --------------
    -
  -
-

---------------------------------------------- ---------------
--------------------------------------------- --------------
展开代码

这些代码定义了一个 Custom Element 和一个 Web Component。首先,我们创建了一个 Custom Element,它的构造函数中创建了一个内部的 div 元素,还绑定了一个 click 事件。在 ConnectedCallback() 中,我们简单地记录了插入事件,而在 DisconnectedCallback() 中记录了移除事件。最后,为了让 Custom Element 监视 name 属性改变,我们使用了 observedAttributes() 和 attributeChangedCallback()。

接着,我们创建了一个 Web Component,它的构造函数中使用了 shadow DOM、HTML Templates 和 HTML Imports。在 ConnectedCallback() 中,我们记录了插入事件,而在 DetachedCallback() 中记录了移除事件。最后,为了让 Web Component 监视 name 属性的改变,我们也使用了 observedAttributes() 和 attributeChangedCallback()。

最后,我们使用 window.customElements.define() 函数来为这些元素进行注册,并且将它们添加到页面上。这个例子可以帮助你更好地理解 Custom Elements 和 Web Components 生命周期,以及它们之间的区别。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c9218be46428fe9e02c274

纠错
反馈

纠错反馈