as you pointed out, runInAction wrap action(fn)() with friendly syntax, while flow and yield block the state change in async flow.
When I faced the MobX's cation of @action and runInAction, I started to use runInAction so I would have to understand how MobX change states.
Anyway your comment improve my comprehension of MobX!
Thanks again.
I lied to you before :( I didn't read it correctly.
It would work as expected because there is just one setter and mobx can handle that.
But when we turn on mobx.configure({ enforceActions: true }) it would fail. And it would fail even with @action async someAction() {....} because await is asynchronous and outside the original @action function. In this example this.someState = await waits to await. So your original example was correct :)
It really depends on many things (enforceActions: true, @async decorator, etc ...). Great explanation on this (new for me) page mobx.js.org/best/actions.html :)
Thank you for the comment, David!
I do not have to use
runInAction
in this use case right?Maybe that's true.
Actually I wrote multiple MobX state change like this with
mobx.useStrict(true)
:as you pointed out, runInAction wrap
action(fn)()
with friendly syntax, whileflow
andyield
block the state change in async flow.When I faced the MobX's cation of
@action
andrunInAction
, I started to userunInAction
so I would have to understand how MobX change states.Anyway your comment improve my comprehension of MobX!
Thanks again.
I lied to you before :( I didn't read it correctly.
It would work as expected because there is just one setter and mobx can handle that.
But when we turn on
mobx.configure({ enforceActions: true })
it would fail. And it would fail even with@action async someAction() {....}
becauseawait
is asynchronous and outside the original @action function. In this examplethis.someState = await
waits toawait
. So your original example was correct :)It really depends on many things (enforceActions: true, @async decorator, etc ...). Great explanation on this (new for me) page mobx.js.org/best/actions.html :)
No, I did not write
enforceActions: true
(noruseStrict()
, old api) in my article. It's my fault, though thank you for clarification ;)As you mentioned, both
await
andPromise
wrap new function which change MobX's state sorunInAction
, otherwise MobX shows caution.