javascript - React : controlled vs uncontrolled component 中基于数组的复选框

标签 javascript reactjs

我在状态中有一组值,例如:

['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}
/>

但这会返回一个警告:

Warning: A component is changing a controlled input of type checkbox to be uncontrolled. Input elements should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component.

我不确定是否理解,因为我认为该组件仍然受控... checked 条件是基于状态的,所以我认为它可以工作。如何通过仍然继续使用数组作为引用来避免此警告?

最佳答案

您应该使用 array.includes 而不是在数组中查找。您的问题与this相关React 中的错误已在新版本中删除。

我已经为你创建了一个沙箱。

Edit React and SCSS

关于javascript - React : controlled vs uncontrolled component 中基于数组的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52317054/

相关文章:

javascript - 如何在 Ant Design 中更改所选菜单项的颜色?

javascript - 如何使用 philips hue API 创建 "scenes"

reactjs - 如何重新渲染 react 表中的整个单行?

reactjs - 无法转到完整日历上的特定日期

reactjs - 使用 package.json react Bootstrap datepicker 问题

reactjs - React-Localization setLanguage() 不更新页面

javascript - 如何计算ul里面有li的span

javascript - 在 JavaScript 中将 2 个数组相乘

javascript - 如何在不使用标签包装的情况下突出显示 HTML 文本?

javascript - 除了在源中放置图像之外,还有其他选择吗?