首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React中基于数组的复选框:受控的还是不受控制的组件

React中基于数组的复选框:受控的还是不受控制的组件
EN

Stack Overflow用户
提问于 2018-09-13 15:30:54
回答 2查看 1.8K关注 0票数 1

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

代码语言:javascript
复制
['foo', 'bar', 'baz'] // in this.state.values

此值数组用于控制复选框的状态。因此,有三个复选框,每个复选框都有一个onChange属性,如下所示:

代码语言:javascript
复制
<input
   type="checkbox"
   name={name}
   onChange={this.handleChange}
/>

handleChange方法只是从数组中添加或删除值。

所以天真地,我想我可以检查数组中的值是否存在,以确定是否选中了复选框。所以我做了这个:

代码语言:javascript
复制
<input
   type="checkbox"
   name={name}
   checked={this.state.values.find(e => e === name)}
   onChange={this.toggle}
/>

但这将返回一个警告:

警告:组件正在将类型为受控的输入复选框更改为不受控制。输入元素不应从受控切换到不受控制(反之亦然)。决定在组件的生存期内使用受控输入元素还是不受控制的输入元素。

我不太明白,因为我觉得这个部件还在控制中.checked条件是基于状态的,所以我认为它可以工作。如何通过继续使用数组作为引用来避免此警告?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-13 16:05:17

与其在数组中查找,不如使用array.includes。您的问题是React中的相关错误,它在新版本中被删除。

我给你做了一个沙箱。

票数 1
EN

Stack Overflow用户

发布于 2018-09-13 15:38:14

是否为状态设置了初始值?如果不是,这可能就是问题所在。如果还没有设置this.state,那么您的输入最初是不受控制的。设置组件的初始状态如下:

代码语言:javascript
复制
  constructor(props) {
    super(props);
    this.state = { values: ['foo', 'bar', 'baz'] };
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52317054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档