javascript - 在 react.js 中单击按钮时添加类

标签 javascript css reactjs

我已经在 React 上工作了几个星期了,虽然我已经掌握了大部分基本语法(属性、状态),但我仍在努力与一些概念建立联系,最显着的是添加类当状态发生变化时。我正在尝试构建一个 simon says 游戏,其中包含四个按钮,全部使用 Button 组件构建。这些最初设置为具有 0.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>
    );
  }
}

还有我的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;
}

所以,此时此刻,我只想在单击按钮时添加一个类,同时仍保留组件的“按钮”类。谁能帮忙?

最佳答案

React 有几种方法可以做到这一点。第一个是 Tudor Ilisoi 建议的,它只是连接字符串。 第二种方法是给 className 一个 Object 而不是 string。这种方式可以说更简单,但需要您添加 classnames 模块。 您可以使用 npm install --save classnamesyarn add classnames 安装它。 你可以导入它:

import classNames from 'classnames';

然后您可以通过以下方式使用它:

<button className={classNames({button: true, active: this.state.active})} />

第一对花括号只是告诉 React 我们正在传递一个动态属性,第二对只是对象的普通 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} />
     );
}

关于javascript - 在 react.js 中单击按钮时添加类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42523006/

相关文章:

reactjs - React Project : Safari seems to be rendering, 但不绘制元素?

reactjs - React FunctionComponent 的 TypeScript 类型,它只返回一个 IntrinsicElement

javascript - 过滤列表中的数据(删除按钮)不起作用?

javascript - Angular.js 对不同数据重用部分内容

javascript - header 比父元素宽 ~60%?

javascript - 继续在 telerik 的 radgrid 中显示工具提示

javascript - 我想使用 for 循环从现有的 div 和 css 中增加多个 div

javascript - AJAX 发布成功但 PHP 没有响应

javascript - Leaflet.js 将按钮添加到标记弹出窗口

javascript - 如何检查一个 Div 是否为空然后执行操作