Custom Elements 开发遇到的几个坑及解决方案

阅读时长 5 分钟读完

随着 Web 技术的不断发展,越来越多的网站开始采用组件化开发的方式,实现对页面元素进行封装,提高代码复用性。而 Custom Elements 就是其中一种很好的组件化开发方式。

Custom Elements 允许我们创建自定义的 HTML 标签,这些标签具备和普通的 HTML 标签一样的使用方式,并且可以包含各种属性和方法。但是,在 Custom Elements 的开发过程中也会遇到一些坑,下面我们就来详细讲解一下这些坑以及解决方案。

坑一:样式难以控制

在 Custom Elements 的开发过程中,我们经常会遇到这样的情况:我们想要给自定义元素设置样式,但是却无法控制。这是因为 Custom Elements 的样式隔离机制导致的。

具体来说,当我们在自定义元素内部定义样式时,它只会作用到自定义元素内部的元素,外部元素无法被样式所控制。而如果我们想要让样式作用到自定义元素外层元素,我们就需要使用 :host 伪类选择器。

例如,下面的代码会使 <my-element> 元素的背景色变成蓝色:

坑二:属性监听器不生效

在 Custom Elements 中,我们可以使用 observedAttributes 属性来监听元素属性的变化,但是有时候这个监听器却不生效。这是因为属性监听器的注册时机不正确,需要在 connectedCallback 中注册。

下面的代码展示了属性监听器的正确注册方式:

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

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

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

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

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

坑三:子元素渲染不正确

当我们在 Custom Elements 中使用子元素时,有时候子元素的渲染顺序并不符合我们的预期。这是因为我们没有在正确的时机创建子元素,需要在 connectedCallback 中创建。

下面的代码展示了正确创建子元素的方式:

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

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

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

坑四:元素无法从 DOM 树中移除

有时候我们需要增加一个按钮或者其他元素来实现元素的删除操作,但是当我们从 DOM 树中移除元素时,会发现元素并没有被完全移除。这是因为元素的引用仍然保存在内存中,需要手动清除。

下面的代码展示了如何正确从 DOM 树中移除元素:

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

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

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

总结

Custom Elements 是一种很好的组件化开发方式,但是在开发过程中也会遇到一些坑。通过本篇文章的学习,相信大家能够更好地掌握 Custom Elements 的开发技巧,写出更加优秀的组件代码。

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

纠错
反馈