Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setState不适用于数组_Javascript_Reactjs - Fatal编程技术网

Javascript setState不适用于数组

Javascript setState不适用于数组,javascript,reactjs,Javascript,Reactjs,我有一个组件收件箱,里面有一个复选框。。。但它在第三次点击时起作用。。。第一次和第二次单击不起作用设置状态工作正常,但在设置状态 class Inbox extends PureComponent { constructor(props){ this.state = { checked: [true] } } updateCheck(i, convId) { const state = this.state.checked state[i

我有一个组件收件箱,里面有一个复选框。。。但它在第三次点击时起作用。。。第一次和第二次单击不起作用<代码>设置状态工作正常,但在
设置状态

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)}/>
    )
  }
}
类收件箱扩展了PureComponent{
建造师(道具){
此.state={
选中:[正确]
}
}
updateCheck(i,convId){
const state=this.state.checked
状态[i]=!状态[i]
this.setState(状态)
}
render(){
返回(
this.updateCheck(i,conv.\u 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调用可能会替换原始更改,因此您会看到这种行为

根据

不要直接改变this.state,因为以后调用
setState()
可能会 替换你所做的变异。把这个国家当作 不变的


这似乎有效,不是吗?嘿它是有效的。。。但是这一行有什么区别呢
[…this.state.checked]