javascript - setState不适用于数组reactjs

标签 javascript reactjs

我有组件 Inbox 并且里面有复选框...但是它在第三次点击时有效...在第一次和第二次点击时无效...setState 工作完美但它没有在 setState

之后重新渲染
class Inbox extends PureComponent {
  constructor(props){
    this.state = {
      checked: [true]
    }
  }

  updateCheck(i, convId) {
    const state = this.state.checked
    state[i] = !state[i]
    this.setState(state)
  }

  render() {
    return (
       <input type="checkbox" checked={this.state.checked[i]} onClick={() => this.updateCheck(i, conv._id)}/>
    )
  }
}

最佳答案

您并没有真正正确地更新状态。设置状态如

this.setState(state, () => {
  console.log(this.state, '787878787878778787')
})

不使用 state 更新选中状态,而是将带有数组索引的键添加到 state 中

{0: true, 1: false, conversationId: '', checked: [true, false]};

您自己使用

改变检查状态
state[i] = !state[i]

要正确更新状态,您可以这样写

updateCheck(i, convId) {
    const checked = [...this.state.checked]
    checked[i] = !checked[i]
    this.setState({ checked }, () => {
      console.log(this.state, '787878787878778787')
    })
 }

您的方法出现问题是因为您直接改变了原始状态,随后的 setState 调用可能会替换原始更改,因此您会看到该行为。

根据 documentation

Never mutate this.state directly, as calling setState() afterwards may replace the mutation you made. Treat this.state as if it were immutable.

Working demo

关于javascript - setState不适用于数组reactjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50116580/

相关文章:

javascript - Express 尝试从错误的文件夹中提取资源

reactjs - 401 使用react-adal 访问受Azure AD 保护的API 时出错

javascript - react : how to pass instance to onClick without using an active index

reactjs - 通过在内部调用 navigation.navigate() 来制作共享组件 - React Native

javascript - 基本问题 React 与 Express 动态表

reactjs - 更改react-day-picker DayPickerInput组件中的语言

javascript - 从 javascript 中的字符串中删除 "\"

javascript - 如果变量已经被初始化,则创建一个使用该变量的函数

javascript - css3动画使用html5数据属性

javascript - 为什么我使用 JSON P api 会收到 404 Forbidden 错误?