React Native 如何在MobX中将decorator @action转换为非decorator action

00jrzges  于 2023-10-22  发布在  React
关注(0)|答案(3)|浏览(115)

我正在从我的React Native应用程序中删除装饰器(babel有太多问题),我的操作不起作用(包含的函数不运行)。
我在翻译集体诉讼。

class MyStore {
  //...

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

class MyStore {
  //...

  myAction(param) {
    action("Perform action with param", (param) => {
      //...
    })
  }
}

将class @action转换为非装饰器形式的正确方法是什么?

e5njpo68

e5njpo681#

您可以将操作定义为

class MyStore {
  //...

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

或使用runInAction()

class MyStore {
  //...

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

bxgwgixi2#

将class @action转换为非装饰器形式的正确方法是什么?
装饰器在运行时对函数调用求值,因此简单地手动调用它们将是最简单的事情。@action是一个方法装饰器,方法装饰器在运行时接受以下参数:
1.示例方法的类原型(静态方法的构造函数)
1.方法名称(属性键)
1.方法的属性说明符
考虑到这一点,你可以简单地做到:

class MyStore {
    myAction(param) {
        // ...
    }
}

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

或:

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

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

kwvwclae

kwvwclae3#

为什么不直接使用makeAutoObservable?

import { makeObservable, observable, action } from 'mobx';

class MyStore {
 someValue = 0;

  constructor() {
    makeAutoObservable(this)

  myAction(param) {
    // Your action code here
    this.someValue = param;
  }
}

相关问题