【问题标题】:Can't uncheck checkbox using react无法使用反应取消选中复选框
【发布时间】:2020-03-09 13:08:23
【问题描述】:

此复选框被永久选中,我希望预先选中的复选框更改布尔状态。我目前正在使用这个handleChange 方法来处理文本输入。我必须创建另一个方法来处理复选框还是可以添加到现有方法中?

state = {
  billingEmail:'',
  billingAddressSame: true,
}
handleChange = input => e => {
   this.setState({[input]: e.target.value})
}
<input
  className="col-sm-12"
  type="email"
  placeholder="Email"
  onChange={handleChange('billingEmail')}
  defaultValue={values.billingEmail}
/>

<label className="col-sm-12" style={{paddingLeft: "0"}}>
  <input
    type="checkbox"
    checked={values.billingAddressSame}
    onChange={handleChange('billingAddressSame')}
  />
  Same as company address
</label>

【问题讨论】:

标签: javascript reactjs jsx


【解决方案1】:

将您的 handleChange 函数更改为

handleChange = input => e => {
   this.setState({[input]: !this.state[input]})
}

【讨论】:

  • 这会将我的所有状态更改为布尔值。我仍然需要在其他州存储字符串。如果我使用 2 种不同的方法,这可能会奏效。
【解决方案2】:

您可以通过单一方法控制复选框和输入。

见

构造函数和句柄变化函数-

constructor(props) {
 super(props);
 this.state = {
  isGoing: true,
  numberOfGuests: 2
 };

 this.handleInputChange = this.handleInputChange.bind(this);
}

handleInputChange(event) {
 const target = event.target;
 const value = target.type === 'checkbox' ? target.checked : target.value;
 const name = target.name;

 this.setState({
   [name]: value
 });
}

在你的渲染函数中 -

render() {
 return (
  <form>
    <label>
      Is going:
      <input
        name="isGoing"
        type="checkbox"
        checked={this.state.isGoing}
        onChange={this.handleInputChange} />
    </label>
    <label>
      Number of guests:
      <input
        name="numberOfGuests"
        type="number"
        value={this.state.numberOfGuests}
        onChange={this.handleInputChange} />
    </label>
  </form>
 );
}

See this for more info

【讨论】:

    【解决方案3】:

    试试这个并告诉我,它对我来说很好用

    import React, { Component, Fragment } from 'react';
    
    class SignUp extends Component{
      state = {
        billingEmail:'',
        billingAddressSame: true,
      }
    
      render(){
        return(<Fragment>
    
          <input className="input" type="email" className="col-sm-12" placeholder="Email" value={this.state.billingEmail} onChange={e => this.setState({billingEmail: e.target.value})}/>
    
          <label className="col-sm-12" style={{paddingLeft: "0"}}>
          <input type="checkbox" value="CheckBox1" checked={this.state.billingAddressSame} onChange={e => this.setState({ billingAddressSame: !this.state.billingAddressSame })} />
            Same as company address
          </label>
        </Fragment>)
      }
    }
    
    export default SignUp;
    

    【讨论】:

    • 很遗憾遇到同样的问题,无法取消选中复选框。
    • 我已经编辑了上面的代码,你仍然面临同样的问题,请告诉我
    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 2015-10-29
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 2015-11-11
    相关资源
    最近更新 更多