【问题标题】:Toggling checkboxes in React在 React 中切换复选框
【发布时间】:2018-03-21 05:31:21
【问题描述】:

我在尝试切换 React 中的复选框时遇到了令人沮丧的问题。

当我选中该框时,状态会更新,而当我 console.log 它们时,状态、先前状态和选中显示 true,这本身就很奇怪。但是复选框没有选中。

    this.state = {
        type: {
            prop1: false,
            prop2: false
        }
    }

处理事件变化

handleCheckbox(e) {
    const name = e.target.name;
    const checked = e.target.checked;
    this.setState((prevState) => {
        this.state.type[name] = !prevState.type[name];
    });
}

复选框

<input
   type="checkbox"
   name="prop1"
   id="string"
   className="modal__checkbox-input"
   checked={this.state.type.prop1}
   onChange={this.handleCheckbox}
/>

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    从您的功能 setState 中,您需要返回要更新的状态,而不是改变原始状态

    handleCheckbox(e) {
        const name = e.target.name;
        const checked = e.target.checked;
        this.setState((prevState) => {
            return {
               type: {
                  ...prevState.type,
                  [name]: !prevState.type[name]
               }
            }
        });
    }
    

    【讨论】:

      【解决方案2】:

      更新你的 handleCheckbox 你会发现旧状态为 this.state

      handleCheckbox(e) {
          const name = e.target.name;
          const checked = e.target.checked;
          const d = this.state.type;
          d[name] = !d[name];
          this.setState({ type : d });
      }
      

      【讨论】:

      • 我在控制台中遇到错误,如果我尝试这样做,我的代码编辑器会将 setState 代码突出显示为红色。
      猜你喜欢
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多