简体   繁体   English

在React中,如何使用一种方法来切换多个复选框值的状态

[英]In React, how to use one method to toggle states for multiple checkboxes values

 _toggleValue: function(state) {
    //?? how to do it 
    //this.setState(???);
  },

render() {
  <div>
    <form>
      <input type="checkbox" onChange={this._toggleValue.bind(null, this.state.a)} />
      <input type="checkbox" onChange={this._toggleValue.bind(null, this.state.b)} />
      <input type="checkbox" onChange={this._toggleValue.bind(null, this.state.c)} />
    </form>
  </div>
}

There are quite lot checkboxes in the form, currently, what I am doing is to define one method for each checkbox. 表单中有很多复选框,目前我正在做的是为每个复选框定义一个方法。 How can I define one method which can be used by all the checkboxes. 如何定义一个可供所有复选框使用的方法。

Many thanks in advance 提前谢谢了

You can use an id on your checkboxes and retrieve it from event.target.id that is passed to onChange handler as below: 您可以在复选框上使用id ,并从传递给onChange处理程序的event.target.id中检索它,如下所示:

_toggleValue: function(event) {
    var state = this.state[event.target.id];
},
render: function() {
    return (
        <div>
            <form>
                <input type="checkbox" id={1} onChange={this._toggleValue}/>
                <input type="checkbox" id={2} onChange={this._toggleValue}/>
                <input type="checkbox" id={3} onChange={this._toggleValue}/>
            </form>
        </div>
    )
}

You could use the LinkedStateMixin . 您可以使用LinkedStateMixin

Your checkboxes would look something like this: 您的复选框看起来像这样:

<input type='checkbox' checkedLink={this.linkState('a')}/>
<input type='checkbox' checkedLink={this.linkState('b')}/>
<input type='checkbox' checkedLink={this.linkState('c')}/>

This will automatically keep the values of the checkboxes a , b and c up to date with the state variables. 这将自动保持复选框abc的值与状态变量保持同步。

I did it this way: 我是这样做的:

toggleCheckbox(name, event) {
  let change = !this.state[name];
  this.setState({name: change});
}

<input type="checkbox" name="active" defaultChecked={this.state.active} onChange={this.toggleCheckbox.bind(this, 'active')} />       
<input type="checkbox" name="shared" defaultChecked={this.state.shared} onChange={this.toggleCheckbox.bind(this, 'shared')} />

Note the "defaultChecked" and that I'm not using the preventDefault() statement. 注意“defaultChecked”并且我没有使用preventDefault()语句。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM