Exactly, and state changes are batched behind requestAnimationFrame :)
Also, there's .react(new_state), which is synchronous.
If one prefer not to use Proxies (old browsers, etc), it can be disabled via .react( state, { ..., watched: false } ) and then can call just .react() manually after state changes. Which is also batched(async).