javascript - 如何修改 React 中 Bool 数组的值?

标签 javascript reactjs

我的组件中有一个 bool 数组作为状态。如果它是假的,我想将其设置为真。

this.state = {
       checkedPos: []
}

handleChange(index, reaction) {
   if (!this.state.checkedPos[index])
   {
      this.state.checkedPos[index] = true;
      this.addReaction(reaction);
      this.forceUpdate();
   }
}

它有效,但我遇到的唯一问题是它显示此警告:

Do not mutate state directly. Use setState()

所以我尝试改变它并把它写成这样:

this.setState({
 checkedPos[index]: true
})

但它根本无法编译。

最佳答案

一种解决方案是映射您所在州的前一个数组。由于您不应该在没有 setState 的情况下修改您的状态,因此我将向您展示如何在此解决方案中使用它:

handleChange(index) {
    this.setState(prev => ({
        checkedPos: prev.checkedPos.map((val, i) => !val && i === index ? true : val)
    }))
}

这里,仅当先前值为 false 并且索引为与提供的相同。否则,它返回已经存在的值。

然后,您可以在值更新后使用 setState 的第二个参数来执行函数:

handleChange(index) {
    this.setState(prev => ({
        checkedPos: prev.checkedPos.map((val, i) => !val && i === index ? true : val)
    }), () => {
        this.addReaction(reaction);
    })
}

关于javascript - 如何修改 React 中 Bool 数组的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55089592/

相关文章:

javascript - 带 2 个回调的异步 javascript - 如何实现?

javascript - jQuery 版本 1、版本 2 和版本 3 之间有什么区别?

reactjs - React + Ionic 视频录制

reactjs - 如果在状态中接收到相同的值,React 是否会重新渲染组件

用于验证 12 小时时间的 JavaScript 正则表达式

javascript - 当父组件发生变化时更新子组件

javascript - ReactJS:有更好的方法吗?

Javascript动态分组表

javascript - 使用 jQuery 验证确保至少一个下拉列表具有值

Javascript - 单击事件在 "infinite scroll"之后不再起作用