ReactJs adding active class to button

后端 未结 2 1246
梦谈多话
梦谈多话 2020-12-18 08:39

I have five buttons, dynamically created. My target is: when any button is clicked to add active class to it, and of course if any other has that active class to remove it.

相关标签:
2条回答
  • 2020-12-18 09:19

    You need to introduce state to your component and set it in onClick event handler. For example output of render method:

    <div>
        {buttons.map(function (name, index) {
            return <input
                     type="button"
                     className={this.state.active === name ? 'active' : ''}
                     value={name}
                     onClick={() => this.someFunct(name)}
                     key={ name } />;
       })}
    </div>
    

    event handler (element method):

    someFunct(name) {
        this.setState({ active: name })
    }
    
    0 讨论(0)
  • 2020-12-18 09:24

    One of the easiest way to add active class is setting state and changing that state on each switch, by the state value you can change the active class of the item.

    I also had an same issue with switching the active class in list.

    Example:

    var Tags = React.createClass({
      getInitialState: function(){
        return {
          selected:''
        }
      },
      setFilter: function(filter) {
        this.setState({selected  : filter})
        this.props.onChangeFilter(filter);
      },
      isActive:function(value){
        return 'btn '+((value===this.state.selected) ?'active':'default');
      },
      render: function() {
        return <div className="tags">
          <button className={this.isActive('')} onClick={this.setFilter.bind(this, '')}>All</button>
          <button className={this.isActive('male')} onClick={this.setFilter.bind(this, 'male')}>male</button>
          <button className={this.isActive('female')} onClick={this.setFilter.bind(this, 'female')}>female</button>
          <button className={this.isActive('child')} onClick={this.setFilter.bind(this, 'child')}>child</button>
          <button className={this.isActive('blonde')} onClick={this.setFilter.bind(this, 'blonde')}>blonde</button>
         </div>
      }
    });
    

    hope this will help you!

    0 讨论(0)
提交回复
热议问题