Estoy eliminando decoradores de mi aplicación React Native (demasiados problemas con babel) y mis acciones no funcionan (la función contenida no se ejecuta).
Estoy traduciendo acciones de clase, por ejemplo
class MyStore { //... @action myAction(param) { //... } }Para
class MyStore { //... myAction(param) { action("Perform action with param", (param) => { //... }) } }¿Cuál es la forma correcta de convertir una clase @action a la forma no decoradora?
Puede definir la acción como
class MyStore { //... myAction = action(param => { //... }); } o usa runInAction()
class MyStore { //... myAction(param) { runInAction(() => { //... }) } }¿Cuál es la forma correcta de convertir una clase @action a la forma no decoradora?
Los decoradores evalúan las llamadas de función en tiempo de ejecución, por lo que simplemente llamarlas manualmente sería lo más sencillo. @action es un decorador de métodos, y los decoradores de métodos toman los siguientes argumentos en tiempo de ejecución:
Con eso en mente, simplemente puede hacer:
class MyStore { myAction(param) { // ... } } // Apply the @action decorator manually: action(MyStore.prototype, "myAction");o:
action(MyStore.prototype, "myAction", Object.getOwnPropertyDescriptor(MyStore.prototype, "myAction"));Si hace esto inmediatamente después de la declaración de la clase, el resultado debería ser completamente idéntico al que se obtiene al usar decoradores, sin tener que usar la sintaxis del decorador.