如何在MobX中将装饰器@action转换为非装饰器操作

时间:2017-01-17 10:49:00

标签: javascript reactjs react-native mobx mobx-react

我正在从我的React Native应用程序中移除装饰器(与babel有太多问题)并且我的操作不起作用(包含的函数不运行)。

我正在翻译集体诉讼,例如

externalNativeBuild {
        ndkBuild {
            path '<path to you android.mk file>'
        }
}

class MyStore {
  //...

  @action 
  myAction(param) {
    //...
  }
}

将类@action转换为非装饰器表单的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

您可以将操作定义为

class MyStore {
  //...

  myAction = action(param => {
    //...
  });
}

或使用runInAction()

class MyStore {
  //...

  myAction(param) {
    runInAction(() => {
      //...
    })
  }
}

答案 1 :(得分:1)

  

将类@action转换为非装饰器表单的正确方法是什么?

装饰器在运行时评估函数调用,因此简单地手动调用它们将是最直接的事情。 @action是方法装饰器,方法装饰器在运行时采用以下参数:

  1. 实例方法的类原型(静态方法的构造函数)
  2. 方法名称(属性键)
  3. 方法的属性描述符
  4. 考虑到这一点,你可以简单地做:

    class MyStore {
        myAction(param) {
            // ...
        }
    }
    
    // Apply the @action decorator manually:
    action(MyStore.prototype, "myAction");
    

    或:

    action(MyStore.prototype, "myAction", Object.getOwnPropertyDescriptor(MyStore.prototype, "myAction"));
    

    如果在类声明后立即执行此操作,则结果应与使用装饰器完全相同,而不必使用装饰器语法。