Ian*_*ger 4 javascript css reactjs
我已经在React上工作了几个星期了,虽然我已经掌握了大部分基本语法(道具,状态),但我很难与一些概念建立联系,最明显的是当一个状态时添加类已经改变.我正在尝试构建一个simon游戏,它包含四个按钮,全部使用Button组件构建.这些最初设置为不透明度为.3且活动状态为false.单击时,状态"活动"变为真,但我不能为我的生活弄清楚如何添加一个可以给按钮完全不透明的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>
);
}
}
Run Code Online (Sandbox Code Playgroud)
而我的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;
}
Run Code Online (Sandbox Code Playgroud)
所以,此时,我只想在单击按钮的同时添加一个类,同时仍然保持组件的"按钮"类.有人可以帮忙吗?
React有两种方法可以做到这一点.第一个是由Tudor Ilisoi建议的,它简单地连接字符串.第二种方式是给className一个Object而不是一个string.这种方式可以说更简单但需要您添加classnames模块.您可以使用npm install --save classnames或安装它yarn add classnames.你可以用以下方法导入它:
import classNames from 'classnames';
Run Code Online (Sandbox Code Playgroud)
然后您可以通过以下方式使用它:
<button className={classNames({button: true, active: this.state.active})} />
Run Code Online (Sandbox Code Playgroud)
第一对花括号只是告诉我们传递动态属性,第二对只是对象的普通JavaScript语法.请注意,该对象由classNames()函数包装.如果我们之前已经宣布过,我们可以轻松地做到:
render(){
const classes = classNames({
button: true, // we always want this class
active: this.state.active, // only add this class if the state says so
});
return (
<button className={classes} />
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11166 次 |
| 最近记录: |