npm 包 jss-plugin-extend 使用教程

阅读时长 7 分钟读完

介绍

jss-plugin-extend 是一个使用 JSS(CSS in JS 解决方案)时,用于扩展已有样式并生成新样式的 npm 包,它可以与 React 等库一起使用。

在 JSS 中,样式由一个对象来表示,使用 jss-plugin-extend 可以将这些对象进行组合,使得与传统 CSS 相同的样式重用方式也可以在应用中使用。

该插件对于需要频繁的样式扩展及修饰、组合操作等场景特别有用,可以帮助开发者快速且灵活处理样式。

安装

使用 npm 进行安装:

使用方法

基础使用

首先,导入需要使用的库:

然后,创建一个 JSS 实例并安装 extend 插件:

最后,使用 extend() 方法对样式进行扩展调用即可:

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

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

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

在这个例子中,baseStylesadditionalStyles 都是样式对象,其中 baseStyles 用于扩展样式,additionalStyles 则用于合并样式。同时,finalStyles 经过了 baseStylesadditionalStyles 的扩展、合并和属性新增,最终生成样式输出。

深度扩展

jss-plugin-extend 还提供了深度扩展样式的能力,允许开发者在扩展样式时仅针对某些属性进行继承或改写操作。

当两个样式层级深度不一致时,extend() 方法默认仅针对顶级对象进行扩展:

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

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

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

如上例所示,当两个样式对象存在层级嵌套时(例如 baseStyles 中的 &:hover),jss-plugin-extend 并不会在扩展时考虑嵌套的对象,这种默认操作称为“浅扩展”。

要实现深度扩展,可以在样式对象中使用 $extend 值(该值应先进行 JSS 处理),用于明确指定需要扩展的属性及其扩展类型。使用 $inherit 值可将指定属性标记为可继承,使用 $merge 值可将指定属性标记为可合并。

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

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

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

在这个例子中,基础样式中使用了 $title 作为深度扩展标记,同时 otherStyles 中同样针对 $icon 属性使用了深度扩展。在 finalStyles 中使用了 $extend 来启用深度扩展功能,使用 $inherit$merge 分别标记属性为可继承和可合并。

示例

一个使用 jss-plugin-extend 的基本样式示例,包括浅拷贝、深复制用法:

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

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

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

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

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

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

输出结果:

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

总结

jss-plugin-extend 是一个非常有用的扩展工具,可以帮助开发者节约大量时间和精力,减少样式开发成本。使用 jss-plugin-extend 进行样式扩展时需要注意原样式对象及扩展对象,在指定要修改的属性时,使用浅拷贝、深复制等方法,以确保样式不会被其他代码修改。

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

纠错
反馈