我已经在React上工作了几个星期,虽然我已经掌握了大部分基本语法(props,states),但我仍然在努力与一些概念建立联系,最明显的是当状态发生变化时添加类。我试图建立一个西蒙说游戏,其中包含四个按钮,所有使用按钮组件构建。它们最初设置为不透明度为0.3,活动状态为false。当点击时,状态“active”变为true,但是我无法为我的生活弄清楚如何添加一个css类,可以给予按钮完全不透明。下面是我的代码:
class App extends Component {
constructor(){
super();
this.state = {
active: false
}
}
handleClick(){
this.setState({active: !this.state.active})
}
renderButtons(i, f){
return <Button value={i} className="button" id={f} active= {this.state.active} onClick={() => this.handleClick()}/>
}
render() {
return (
<div className="App">
{this.renderButtons("red", "buttonRed")}
{this.renderButtons("blue", "buttonBlue")}
{this.renderButtons("green", "buttonGreen")}
{this.renderButtons("yellow", "buttonYellow")}
</div>
);
}
}
我的CSS:
.button{
width: 100px;
height: 45px;
opacity: .3;
margin: 0 auto;
margin-bottom: 30px;
}
#buttonRed{
background: red;
}
#buttonBlue{
background: blue;
}
#buttonGreen{
background: green;
}
#buttonYellow{
background: yellow;
}
所以,现在,我只想在单击按钮时添加一个类,同时仍然将“button”类保留到组件中。有人能帮忙吗?
5条答案
按热度按时间jjjwad0x1#
React有几种方法可以做到这一点。第一种是由Tudor Iliquor提出的,它只是连接字符串。第二种方法是给予
className
一个Object
而不是一个string
。这种方式可以说是更简单,但需要您添加classnames
模块。您可以使用npm install --save classnames
或yarn add classnames
安装它。您可以使用以下命令导入:然后你可以按以下方式使用它:
第一对花括号只是告诉react我们正在传递一个动态属性,第二对花括号只是对象的普通JavaScript语法。请注意,该对象由
classNames()
函数 Package 。如果我们早一点声明它,我们可以很容易地做到:cyej8jka2#
如果你正在寻找2021/2022的答案:下面是一个使用react钩子的例子,当我们点击Toggle class按钮时,它会将类名app添加到div元素中。
pieyvz9o3#
将
className="button"
更改为className={'button ' + f}
用花括号括起来的表达式作为JavaScript计算,并生成一个字符串
另外请注意,当使用花括号语法时,您不必在属性值周围添加双引号
""
。当你的JSX被解析时,React将生成正确的HTML属性,例如
class="button red"
。cedebl8k4#
你有没有尝试过,传递一个可选参数给renderManager,检查它并添加到class:
hzbexzde5#
类似于Davids的答案,但你也可以使用模板文字。