代码之家  ›  专栏  ›  技术社区  ›  rap-2-h

基于React中数组的复选框:受控组件与非受控组件

  •  0
  • rap-2-h  · 技术社区  · 6 年前

    我在状态中有一个值数组,类似于:

    ['foo', 'bar', 'baz'] // in this.state.values
    

    onChange 这样的属性:

    <input
       type="checkbox"
       name={name}
       onChange={this.handleChange}
    />
    

    这个 handleChange

    <input
       type="checkbox"
       name={name}
       checked={this.state.values.find(e => e === name)}
       onChange={this.toggle}
    />
    

    但这会返回一个警告:

    警告:组件正在将checkbox类型的受控输入更改为非受控输入。输入元件不应从受控切换到非受控(反之亦然)。在组件的使用寿命内,决定使用受控或非受控输入元件。

    我不确定能不能理解,因为我认为这个组件还是被控制着的。。。这个 checked 条件是基于状态的,所以我认为它可以工作。如何通过继续使用数组作为参考来避免此警告?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Rutul Patel    6 年前

    array.includes . 你的问题是相关的 this

    我为你创建了一个沙盒。

    Edit React and SCSS

        2
  •  0
  •   tallpaulk    6 年前

    你有州的初始值吗?如果不是,那可能就是问题所在。如果本州尚未设置,则您的输入最初是不受控制的。如下所示设置组件的初始状态:

      constructor(props) {
        super(props);
        this.state = { values: ['foo', 'bar', 'baz'] };
      }