As the Duplicate answer by @MayankShukla indicates, setState is asynchronous
,
however Adding an explanation and a corrected approach
In the below case:
this.setState({numOpen: (++this.state.numOpen)});
You are mutating the state directly and then setting the value and hence it works, but is not the right way to do it
In the second case
this.setState({numOpen: (this.state.numOpen + 1)});
setState
is adding the value to the current state as you experience it leads to unexpected behaviour due to its asynchronous nature.
The correct way to do it is to use the prevState
callback approach
this.setState((prevState) => ({numOpen: (prevState.numOpen + 1)});
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…