我在状态中有一组值,类似于:
['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}
/>但这将返回一个警告:
警告:组件正在将类型为受控的输入复选框更改为不受控制。输入元素不应从受控切换到不受控制(反之亦然)。决定在组件的生存期内使用受控输入元素还是不受控制的输入元素。
我不太明白,因为我觉得这个部件还在控制中.checked条件是基于状态的,所以我认为它可以工作。如何通过继续使用数组作为引用来避免此警告?
发布于 2018-09-13 16:05:17
发布于 2018-09-13 15:38:14
是否为状态设置了初始值?如果不是,这可能就是问题所在。如果还没有设置this.state,那么您的输入最初是不受控制的。设置组件的初始状态如下:
constructor(props) {
super(props);
this.state = { values: ['foo', 'bar', 'baz'] };
}https://stackoverflow.com/questions/52317054
复制相似问题