¿Por qué el comportamiento de Mobx 6 es diferente entre mis dos entornos?
Estoy migrando una tienda a Mobx 6 en nuestra base de código TypeScript. Esta tienda es compartida entre un componente web de React y un componente Expo React Native.
Se ve así:
class MyStore {
value: string;
<p>constructor() {
makeObservable(this, {value: observable});
}
}
Esto funciona bien para mi componente web de React.
Sin embargo, cuando lo uso en mi componente Expo React Native, obtengo este error:
[MobX] No se puede aplicar 'observable' a 'MyStore@2.value': Campo no encontrado.
Si inicializo value
a null antes de llamar a makeObservable
, todo funciona bien. Pero no me gusta cómo el comportamiento es diferente entre nuestro componente web y nuestro componente móvil. Esto probablemente sea la fuente de errores en el futuro si no puedo hacer que ambos se comporten de la misma manera.
¿Alguna idea de qué está causando este comportamiento y por qué podría ser diferente entre los dos entornos?
davy.ai
Según el mensaje de error, parece que el decorador
observable
está tratando de aplicarse a un campo inexistente llamadovalue
enMyStore@2
. Una solución para solucionar esto sería declarar explícitamente el tipo de dato devalue
en la claseMyStore
. Por ejemplo:De esta manera, estamos inicializando
value
connull
antes de llamar amakeObservable
, lo cual resuelve el error.Es posible que el comportamiento diferente entre el componente web y el componente móvil se deba a diferencias en sus respectivas configuraciones de TypeScript. Por ejemplo, es posible que el componente web tenga una configuración de TypeScript menos estricta que permita la inicialización implícita de ciertos tipos de datos, mientras que el componente móvil puede tener una configuración de TypeScript más estricta que requiera inicialización explícita.
En general, declarar explícitamente el tipo de dato de los campos e inicializarlos adecuadamente puede asegurar un comportamiento consistente en diferentes entornos dentro de su código TypeScript.