简体   繁体   English

在React中切换CSS类

[英]Toggle css class in React

How to toggle a presence of css class on element in React with boolean value? 如何使用布尔值在React中的元素上切换CSS类的存在? In Angular 2 I could just do [class.red]="isRed" . 在Angular 2中,我可以做[class.red]="isRed" How to do familiar thing in React? 如何在React中做熟悉的事情?

In React, elements get their classes using a syntax like this 在React中,元素使用这样的语法获取类

<div className="some-class" />

Note however that JSX allows attribute values to be JS expressions 但是请注意,JSX允许属性值成为JS表达式

<div className={"some-" + "class"} />

Which can be used generate a class name based on some logic, such as your boolean check 可以根据某种逻辑(例如布尔检查)生成哪个类名

<div className={isRed ? "red" : null} />

If your element should also has some classes that don't depend on a variable and should always be applied, this can be achieved with 如果您的元素还应该具有一些不依赖变量的类,并且应始终应用,则可以使用以下方法实现

<div className={"my-class " + (isRed ? "red" : null)} />

At which point it seems to start to get messy and it's probably better to extract that into a local variable instead 在这一点上似乎开始变得混乱,最好将其提取到局部变量中

var className = "my-class " + (isRed ? "red" : null);
<div className={className} />

React itself doesn't provide an utility function to deal with this, however the boolean pattern is so common, there is a package called classnames that will turn the above into React本身不提供实用程序功能来处理此问题,但是布尔模式非常普遍,有一个名为classnames的包会将上述内容转换为

var className = cx("my-class", { "red": isRed });
<div className={className} />

You can use state for that. 您可以使用状态

<div className={this.state.styleClass}></div>

On any event you can change the class like 无论如何,您都可以像

handleClick: function(){
    this.setState({styleClass: 'red'})
}

Toggle css class in React 在React中切换CSS类

<div className={isRed && "red"}></div>

let isRed = true;
//result
<div class="red"></div>

let isRed = false or null or undefined or "" or 0;
//result
<div class=""></div>

if there is another class u may use 如果还有其他课程,您可以使用

<div className={"element "+ (isRed ? "red":"")}></div>

or put result in varaiable 或将结果可变

let modificator = isRed ? "red":"";
<div className={"element "+ modificator}></div>

the same with open/close classes 与打开/关闭类相同

let modificator = isOpen ? "open" : "close";
<div className={"element "+ modificator}></div>

if you want to not render some element 如果您不想渲染某些元素

{isShow && <div className="element"></div> }

It is common practice ,using logic and ternary operators for that. 这是常见的做法,为此使用逻辑和三元运算符。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM