如何在流动作中使用自动运行?

时间:2019-11-13 16:05:58

标签: mobx-state-tree

就像docs autorun中那样,可以用来对被调用函数进行去抖动,因此最后一次调用是我们在一定时间内被调用的唯一调用。

但是我无法弄清楚如何将其与使用action的{​​{1}}一起使用,有没有示例?

例如:

flow

上面的示例如何使用syncMobileToken: flow(function* syncMobileToken(token) { self.isLoading = true let response = yield cli.post("/notifications/sync_mobile_token", { token: token, device_id: Config.DEVICE_ID, }) self.isLoading = false }),

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解您的问题,但是我的假设是您想在syncMobileToken每次更改时都运行方法token并添加一个延迟,因此该方法不会在每次按键时都运行或其他事件触发器。

如果是这样,则可以利用模型的afterCreate生命周期方法

myModel = types.model({}).actions(self => ({
  afterCreate() {

    addDisposer(self, 
      reaction(() => ({
          token: self.token
      }), () => { 
        await self.syncMobileToken(self.token)
      },{
        delay: 200
      })
    )
  }

}))

您需要将反应包装在addDisposer中,以便在模型被销毁/移除时反应停止触发。

这是我偏爱的使用方式。老实说,我通常不会使用autorun

如果我的回答不能解决您的问题,请提供更多有关您尝试使用自动运行达到的目的的详细信息。