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]