Your state needs some time to mutate, and since console.log(this.state.boardAddModalShow)
executes before the state mutates, you get the previous value as output. So you need to write the console in the callback to the setState
function
openAddBoardModal() {
this.setState({ boardAddModalShow: true }, function () {
console.log(this.state.boardAddModalShow);
});
}
setState
is asynchronous. It means you can’t call it on one line and assume the state has changed on the next.
According to React docs
setState()
does not immediately mutatethis.state
but creates a
pending state transition. Accessingthis.state
after calling this
method can potentially return the existing value. There is no
guarantee of synchronous operation of calls to setState and calls may
be batched for performance gains.
Why would they make setState
async
This is because
setState
alters the state and causes rerendering. This
can be an expensive operation and making it synchronous might leave
the browser unresponsive.Thus the
setState
calls are asynchronous as well as batched for better
UI experience and performance.