如何在 React 中组合多个类名?

Posted

技术标签:

【中文标题】如何在 React 中组合多个类名?【英文标题】:How to combine multiple classNames in React? 【发布时间】:2019-12-22 17:36:56 【问题描述】:

我正在使用 Create-React-App 编写一个小型 React 应用程序。对于简单的样式调整,我使用 tachyons-css。由于频繁出现的 CSS 样式问题,我最近从经典 CSS 样式切换到 CSS 模块(对于 SCSS 也是有效问题)。现在我想知道是否有一种方法可以同时使用 CSS 模块和 tachyons 样式 - 即使不再可能只向 CSS 模块样式对象添加一个额外的“经典”类名。

在使用 CSS 模块之前,我曾经通过多个类名来定义一个类和 tachyons 样式(在本例中为 padding5)。 例如:

<ExampleComponent className="examplecomponentstyle pa5"/>

使用 CSS 模块时,CSS 类定义现在如下所示:

<ExampleComponent className=styles.examplecomponentstyle/>

现在如何将这种语法与之前使用的 tachyons 样式结合起来?有这样的东西可以工作吗?:

<ExampleComponent className=styles.examplecomponentstyle & "pa5"/>

非常感谢!

2019 年 9 月 5 日更新:

clsx package 正是我想要实现的目标。安装 clsx 后

npm install --save clsx 

ExampleComponent 然后可以例如像这样使用 clsx 设置样式:

<ExampleComponent className=clsx(styles.examplecomponentstyle, "pa5 bg-yellow")/>

20 年 5 月 17 日更新:

正如 Sandip 指出的那样,ClassNames package 和 clsx 包可用于实现相同的行为。这两个软件包的每周下载量甚至表明 ClassNames 的使用频率比 CLSX 高得多(截至 2020 年 5 月 17 日,每周下载量约为 5.2 mio 与约 1.6 mio)。 github 上的This link 讨论了两个包之间的性能差异。

【问题讨论】:

您甚至可以使用npmjs.com/package/classnames。 您好 Sandip,感谢您的回答,classnames 无疑也是一个很好的解决方案,并且可能使用得更频繁。这个link 非常有趣,因为这两个包的性能略有不同 【参考方案1】:

没有任何包装:

className=[styles.examplecomponentstyle, "pa5"].join(" ");

正如你已经提到的,clsx 的包非常好:

className=clsx(styles.examplecomponentstyle, "pa5 bg-yellow")

【讨论】:

以上是关于如何在 React 中组合多个类名?的主要内容,如果未能解决你的问题,请参考以下文章

React:如何组合 Material-UI 中标记的每个多个样式

如何组合多个内联样式对象?

具有 CSS 模块和 React 的多个类名

C#Reflection - 如何在运行时重新加载类?

如何将类名/id 添加到 React-Bootstrap 组件?

当元素包含多个类名时如何在硒中复制标签?