【问题标题】:How to use autorun with a flow action?如何将自动运行与流操作一起使用?
【发布时间】:2019-11-13 16:05:58
【问题描述】:

docs 中的autorun 可用于对被调用函数进行去抖动处理,因此最后一次调用是我们在一定时间内被调用的唯一一次。

但我不知道如何将它与使用flowaction 一起使用,有什么例子吗?

例如:

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 
    }),

autorun 将如何与上述示例一起使用?

【问题讨论】:

    标签: mobx-state-tree


    【解决方案1】:

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

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

    myModel = types.model({}).actions(self => ({
      afterCreate() {
    
        addDisposer(self, 
          reaction(() => ({
              token: self.token
          }), () => { 
            await self.syncMobileToken(self.token)
          },{
            delay: 200
          })
        )
      }
    
    }))
    
    

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

    这是我喜欢的使用方式。老实说,我通常不使用autorun

    如果我的回答不能解决您的问题,请详细说明您尝试使用自动运行实现的目标。

    【讨论】:

    • 好像:每0.2s会同步一次,即使客户端的数据还在变化
    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2023-03-11
    相关资源
    最近更新 更多