使用Mobx动作获取数据/执行异步请求

时间:2019-12-20 18:12:08

标签: react-native mobx

请告知使用mobx操作(https://mobx.js.org/refguide/action.html)来获取远程api或执行类似操作是否正确:

  @action readSomething() {
    this.observableLoading = true;
    executeRead(
      this.param1,
      mappedData => {
        this.observableData = mappedData;
        this.observableLoading = false;
      },
      () => {
        console.log('error occurred');
      },
    );
  }

如果该方法没有违反mobx商店和商店行动背后的想法,那么如何报告提取错误?引入专用可观察的错误管道?

1 个答案:

答案 0 :(得分:1)

我将假设executeRead在执行第二个参数操作之前执行异步操作。在这种情况下,这是错误的用法。动作装饰器仅适用于函数的第一行。您可以咨询MobX docs here。您可以做的是使用runInAction

  @action readSomething() {
    this.observableLoading = true;
    executeRead(
      this.param1,
      mappedData => {
        runInAction(() => {
          this.observableData = mappedData;
          this.observableLoading = false;
        })
      },
      () => {
        console.log('error occurred');
      },
    );
  }

如果您希望在UI上看到提取错误,则肯定可以再次观察到。您的observableLoading可以是observableState并保持“正在加载”,“完成”或“错误”状态之一。