【问题标题】:how to add css classes to a component in react?如何将css类添加到组件中?
【发布时间】:2016-08-23 19:03:23
【问题描述】:

所以基本上我正在做的是遍历一组数据并制作某种列表。我想在这里实现的是点击一个特定的列表项,一个 CSS 类应该被附加。

迭代制作列表

var sports = allSports.sportList.map((sport) => {
return (
  <SportItem icon= {sport.colorIcon} text = {sport.name} onClick={this.handleClick()} key= {sport.id}/>
)
})

单个列表项

   <div className="display-type icon-pad ">
      <div className="icons link">
        <img className="sport-icon" src={icon}/>
      </div>
      <p className="text-center">{text}</p>
    </div>

我无法弄清楚如何处理 handleClick,因此如果我单击特定列表,它会突出显示。

【问题讨论】:

    标签: javascript html css reactjs


    【解决方案1】:

    如果您想突出显示特定的列表项,最好在列表项本身上调用handleClick 函数,并且您可以使用这种方法更准确地添加 CSS 类,

    这是我实现单列表组件的示例代码

    var SingleListItem = React.createClass({
    getInitialState: function() {
        return {
            isClicked: false
        };
    },
    handleClick: function() {
        this.setState({
            isClicked: true
        })
    },
    render: function() {
        var isClicked = this.state.isClicked;
        var style = {
            'background-color': ''
        };
        if (isClicked) {
            style = {
                'background-color': '#D3D3D3'
            };
        }
        return (
            <li onClick={this.handleClick} style={style}>{this.props.text}</li>
        );
      }
    });
    

    【讨论】:

      【解决方案2】:

      为每个可以选择的项目保留一个单独的 state 变量,并使用 classnames 库有条件地操作类,如 facebook recommends

      编辑:好的,你提到一次只能选择一个元素,这意味着我们只需要存储选择了其中的一个(我将使用所选项目的 id)。而且我注意到您的代码中有一个错字,您需要在声明组件时链接函数,而不是调用它

      <SportItem onClick={this.handleClick} ...
      

      (注意handleClick 不再包含())。

      现在我们将使用 partial application - bind 方法将元素的 id 与事件一起传递给 handleClick 处理程序:

      <SportItem onClick={this.handleClick.bind(this,sport.id} ...
      

      正如我所说,我们希望将所选项目的 id 存储在状态中,因此 handleClick 可能如下所示:

      handleClick(id,event){
      this.setState({selectedItemId: id})
      ...
      }
      

      现在我们需要将selectedItemId 传递给SportItem 实例,以便它们知道当前的选择:&lt;SportItem selectedItemId={selectedItemId} ...。另外,不要忘记将onClick={this.handleClick} 回调附加到它需要的位置, 调用哪个会触发父级中的状态变化:

      <div onClick={this.props.onClick} className={classNames('foo', { myClass: this.props.selectedItemId == this.props.key}); // => the div will always have 'foo' class but 'myClass' will be added only if this is the element that's currently selected}>
      </div>
      

      【讨论】:

      • 嗯,它不必是每个项目的新变量,它可以只是一个名为 selected: [] 的数组。类名库也不是必需的,但在某些情况下会有所帮助。
      • 是的,当然你也可以这样做。我只是提供了一个简单易懂的简单解决方案。一旦他这样做了,我相信他会把它折射成更有效的东西
      • 非常感谢。有没有可行的例子来做到这一点?我对反应很陌生。
      • 我想在这里实现的是一次只需要高亮一次
      • Hey Igorsvee 在最后一个表达式中,您如何从子“this.state.selectedItemId”访问父状态?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 2011-12-24
      • 2012-07-27
      • 2015-02-10
      相关资源
      最近更新 更多