如果 Mobx @observable 的初始值在 React-Native 0.59 中未定义,则 Mobx @observable 不起作用

Met*_*iza 3 observable react-native mobx mobx-react

我正在将react-native 0.51.1 迁移到0.59.8。我正面临 Mobx 的问题。

如果 @observable 装饰成员已分配像这样的 init 值

@observable cnt = 0;
Run Code Online (Sandbox Code Playgroud)

然后就可以了。

但如果它是未定义的,

@observable cnt;
Run Code Online (Sandbox Code Playgroud)

那么它就不起作用了。

我有许多未定义的可观察商店,它们在 0.51.0 中工作。
我想让它以未定义的方式工作。

Babel 装饰选项在迁移过程中已更改。

// babel.config.js
module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
  plugins: [
    ['@babel/plugin-transform-flow-strip-types'],
    ['@babel/plugin-proposal-decorators', { 'legacy': true}],
    ['@babel/plugin-proposal-class-properties', { 'loose': true}],
  ],
}
Run Code Online (Sandbox Code Playgroud)
//This doesn't work but worked in react-native 0.51.0
import { observable } from 'mobx';

export class Count {
  @observable cnt;

  constructor(initValue = 0) {
    this.cnt = initValue;
  }

  add(){
    this.cnt++;
  }
}
Run Code Online (Sandbox Code Playgroud)
//This works
import { observable } from 'mobx';

export class Count {
  @observable cnt = 0;

  constructor(initValue = 0) {
    this.cnt = initValue;
  }

  add(){
    this.cnt++;
  }
}
Run Code Online (Sandbox Code Playgroud)

Met*_*iza 5

undefined明确声明解决了这个问题。

@observable cnt = undefined;
Run Code Online (Sandbox Code Playgroud)