如何在 React 中使用 clsx

Posted

技术标签:

【中文标题】如何在 React 中使用 clsx【英文标题】:How to use clsx in React 【发布时间】:2019-12-24 16:54:50 【问题描述】:

我正在尝试了解 clsx 在为 React 中的组件分配类名时的一些用途。

结构

className=clsx(classes.menuButton, open && classes.hide) 

够清楚了。它应用 'classes.menuButton',如果布尔值 'open' 的值为 true,也应用 'classes.hide'。

我的问题与第二个例子有关:

className=clsx(classes.appBar, [classes.appBarShift]: open )

这将应用“classes.appBar”。但是第二个参数是什么意思呢?

【问题讨论】:

【参考方案1】:

clsx 一般用于有条件地应用给定的className

此语法意味着某些类仅在给定条件评估为 true 时才会应用

const menuStyle = clsx(
    [classes.root] : true, //always applies
    [classes.menuOpen] : open //only when open === true
)

在此示例中,[classes.menuOpen](其评估结果类似于randomclassName123)仅在open === true 时才会应用


clsx 基本上输出一个string interpolation。所以你不必一定要使用它,尽管这是一种常见的做法。

有很多支持的语法可以查看官方docs

代替

<div className=`$classes.foo $classes.bar $classes.baz` />

你可以这样使用它

const  foo, bar, baz  = classes
const style = clsx(foo, bar, baz)

return <div className=style />

【讨论】:

谢谢。如果我理解正确,那么 'open && classes.menuOpen' 与 '[classes.menuOpen] : open' 的效果完全相同。 是的。它们只是实现相同结果的两种不同方法 再次感谢。最后评论 - 构造 'className=clsx(classes.appBar, [classes.appBarShift]: open )' 与 'className=clsx(classes.appBar, classes.appBarShift: open )'。只有当有多个规则依赖于 open 的值时,才真正需要该数组。 是的。您可以检查clsx here 的所有可能的sintaxes 否...数组语法适用于动态键:***.com/a/19837961/3494249 classes.appBarShift: open 会导致错误; [classes.appBarShift]: open 将创建一个对象,其值为 classes.appBarShift 作为键。【参考方案2】:

许多人已经很好地解释了它。我仍然想添加一个包含 className 的示例。在示例中,您可以看到不同的类,如果给定条件评估为真,则应用这些类。在示例中,您可以应用具有布尔值、布尔变量或比较字符串的类(如果匹配,则返回 true)。 classes.drawer 类总是被应用并且不依赖于条件。

className=clsx(classes.drawer,                   // classes.drawer is applied always
          [classes.drawerOpen]: true,              // classes.drawerOpen is applied always, bool = true
          [classes.drawerClose]: !open,            // you can also use boolean variable
          [classes.drawerRed]: colorVar === 'red', // you can also use string variable
        )

【讨论】:

您能否为您的代码添加一些解释? Code-only answers may fall under 'Very Low Quality' ...and are candidates for deletion....We've always touted that we aren't a code factory. We are the people who teach others to fish. Code-only answers only feed a person for a day【参考方案3】:

classes.appBarShift 仅在 open 计算结果为 true 时应用。如果数组有更多类,如果open 评估为true,则将应用所有这些类

【讨论】:

以上是关于如何在 React 中使用 clsx的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 clsx 有条件地渲染 css?

如何使用 clsx 正确加入顺风 css 类?

在 Tailwind CSS 中制作动画标签?

在material-ui中嵌套CSS选择器?

如何使用 React.createRef() 在 React 中访问多个 Dom 元素

如何在 React 经典 `class` 组件中使用 React 钩子?