好吧,我会尽量让这个快,因为它应该是一个简单的修复...为什么调用setState方法不会立即改变状态?
我读过一堆类似的问题,答案似乎很明显。没有什么是我永远不得不首先看的!但是......我有一个错误,我无法理解如何解决或为什么会发生。
如下:
class NightlifeTypes extends Component {
constructor(props) {
super(props);
this.state = {
barClubLounge: false,
seeTheTown: true,
eventsEntertainment: true,
familyFriendlyOnly: false
}
this.handleOnChange = this.handleOnChange.bind(this);
}
handleOnChange = (event) => {
if(event.target.className == "barClubLounge") {
this.setState({barClubLounge: event.target.checked});
console.log(event.target.checked)
console.log(this.state.barClubLounge)
}
}
render() {
return (
<input className="barClubLounge" type='checkbox' onChange={this.handleOnChange} checked={this.state.barClubLounge}/>
)
}
更多的代码,环绕着这座但是这是我的问题所在。应该工作吧?
我也试过这样:
handleOnChange = (event) => {
if(event.target.className == "barClubLounge") {
this.setState({barClubLounge: !this.state.barClubLounge});
console.log(event.target.checked)
console.log(this.state.barClubLounge)
}
所以,我有这两个console.log()
的,都应该是相同的。我在字面上将状态设置为与上面的行中的event.target.checked
相同!
但它始终返回它应该的相反。
同样适用于我使用!this.state.barClubLounge
;如果它开始是错误的,在我第一次点击时它仍然是假的,即使复选框是否被选中是基于状态!
这是一个疯狂的悖论,我不知道发生了什么,请帮助!