Mobx:在没有runInAction的情况下改变状态仍然有效

时间:2017-05-08 06:25:31

标签: reactjs mobx

在mobx documentation中:

  

操作仅影响当前正在运行的函数,而不影响当前函数调度(但未调用)的函数!这意味着如果你有一个setTimeout,promise.then或async构造,并且在那个回调中更多的状态被改变了,那些回调也应该包含在行动中!

上面的意思是,我应该用runInAction换行状态,如下所示:

class App {
    @observable logined = false
    @action async login(payload){
        runInAction(() => {
            setTimeout(() => {
                this.logined = false 
            }, 1000)
        })
    }
}

上面的工作,但奇怪的是,如果我删除runInAction块,代码仍然有效,这种行为与文档说的不一致。

请查看fiddle

1 个答案:

答案 0 :(得分:0)

“动作”使您可以在一个“批处理”中进行多个状态更改-如果只进行一个更改,则不需要它。