介绍
jss-plugin-extend 是一个使用 JSS(CSS in JS 解决方案)时,用于扩展已有样式并生成新样式的 npm 包,它可以与 React 等库一起使用。
在 JSS 中,样式由一个对象来表示,使用 jss-plugin-extend 可以将这些对象进行组合,使得与传统 CSS 相同的样式重用方式也可以在应用中使用。
该插件对于需要频繁的样式扩展及修饰、组合操作等场景特别有用,可以帮助开发者快速且灵活处理样式。
安装
使用 npm 进行安装:
npm install jss-plugin-extend
使用方法
基础使用
首先,导入需要使用的库:
import { create } from 'jss'; import extend from 'jss-plugin-extend';
然后,创建一个 JSS 实例并安装 extend 插件:
const jss = create(); jss.use(extend());
最后,使用 extend()
方法对样式进行扩展调用即可:
-- -------------------- ---- ------- ----- ---------- - - ------ ------ --------- ------- -- ----- ---------------- - - ---------------- ------- -- ----- ----------- - ---------------------- ------- - ------- ----------- -- -- ---------- -------------------- -- -- ---------------- ----------- ------- -- ------- -- ---
在这个例子中,baseStyles
和 additionalStyles
都是样式对象,其中 baseStyles
用于扩展样式,additionalStyles
则用于合并样式。同时,finalStyles
经过了 baseStyles
和 additionalStyles
的扩展、合并和属性新增,最终生成样式输出。
深度扩展
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