Reactjs react中的切换状态工作正常,但“签入我的”功能不正确

Reactjs react中的切换状态工作正常,但“签入我的”功能不正确,reactjs,Reactjs,嗨,我的代码里有些古怪的东西。我的toggleChecked()应该在选中时选择所有房间:true意味着在UI中选中复选框时选择所有房间 如果isChecked为true,它将选择所有房间,但是在toggleCheck()中,如果this.state.isCheck==false,则选择所有房间。此检查应该是this.state.isCheck===true。当我有这个true时,检查它是否按预期工作。例如,当复选框处于未选中状态时,即选中所有房间。但是当检查为false时,它会按预期工作 ``

嗨,我的代码里有些古怪的东西。我的
toggleChecked()
应该在选中
时选择所有房间:true
意味着在UI中选中复选框时选择所有房间

如果
isChecked为true,它将选择所有房间,但是在
toggleCheck()
中,如果
this.state.isCheck==false,则选择所有房间。此检查应该是
this.state.isCheck===true
。当我有这个
true
时,检查它是否按预期工作。例如,当复选框处于未选中状态时,即选中所有房间。但是当检查为
false
时,它会按预期工作

```
   if(this.state.isChecked === false){
        const roomOrder = //this variable has all the rooms in an array;
        this.setState({selectedRooms: roomOrder}); 
    }else{
        this.setState({selectedRooms : []}); 
    }```
导出默认教室扩展React.Component{
建造师(道具){
超级(道具);
此.state={
被检查:错误
};
this.toggleChecked=this.toggleChecked.bind(this);
}
toggleChecked(){
this.setState({isChecked:!this.state.isChecked});
if(this.state.isChecked==false){
const roomOrder=//此变量具有数组中的所有房间;
this.setState({selectedRooms:roomOrder});
}否则{
this.setState({selectedRooms:[]});
}
}
render(){
返回(
选择所有房间
)
}```

状态更改后,您无法检查设置状态更改,请尝试回调方式,这在您的情况下应该有效

您可以查看文档以了解更多详细信息

 toggleChecked() {
        this.setState({ isChecked: !this.state.isChecked }, ()=>{
            if(this.state.isChecked === false){
            const roomOrder = //this variable has all the rooms in an array;
            this.setState({selectedRooms: roomOrder}); 
        }else{
            this.setState({selectedRooms : []}); 
        }
      });
}

状态更改后,您无法检查setState更改,请尝试回调方式,这在您的情况下应该有效

您可以查看文档以了解更多详细信息

 toggleChecked() {
        this.setState({ isChecked: !this.state.isChecked }, ()=>{
            if(this.state.isChecked === false){
            const roomOrder = //this variable has all the rooms in an array;
            this.setState({selectedRooms: roomOrder}); 
        }else{
            this.setState({selectedRooms : []}); 
        }
      });
}
你可以这样做

toggleChecked() {
   if(!this.state.isChecked){
     const roomOrder = //this variable has all the rooms in an array;
     this.setState({selectedRooms: roomOrder, isChecked: !this.state.isChecked}); 
   }else{
     this.setState({selectedRooms : [], isChecked: !this.state.isChecked}); 
   }
}
你可以这样做

toggleChecked() {
   if(!this.state.isChecked){
     const roomOrder = //this variable has all the rooms in an array;
     this.setState({selectedRooms: roomOrder, isChecked: !this.state.isChecked}); 
   }else{
     this.setState({selectedRooms : [], isChecked: !this.state.isChecked}); 
   }
}

this.setState()
是不同步的,因为react是如何优化UI更新的,所以它不能保证在比较
this.state.isChecked
时状态已经更新。请尝试像
this.setState(…,()=>{your code})这样使用回调
是不同步的,因为react是如何优化UI更新的,所以它不能保证在比较
this.state.isChecked
时状态已经更新。尝试使用类似
this.setState(…,()=>{your code})的回调函数
Hi@AkhilAravinf感谢这对我起到了作用,我想知道这里到底发生了什么?回调是在设置状态完成后执行的,这是一个异步函数,因此设置状态后的箭头函数具有更新的值。@Jose抱歉我离开了现场几天,希望[@ricardo]已经给出了一个很好的解释。嗨@AkhilAravinf谢谢这对我有用,这里到底发生了什么,我想了解一下?回调是在setState完成后执行的,这是一个异步函数,因此setState后的arrow函数具有更新值。@Jose抱歉我离开了几天,希望[@ricardo]他给了一个很好的解释。