如何在反应原生0.56(Babel 7)与装饰器中使用mobx

Ale*_*edi 14 babel reactjs react-native mobx

我已经将我的RN应用程序从使用Babel 7的0.55.4升级到0.56.

在0.55.4中使用装饰器用于MOBX我使用"babel-plugin-transform-decorators-legacy"但与Babel 7不兼容......

react-native ver:0.56.0 mobx ver:5.0.3 mobx-react ver:5.2.3

有没有人有解决方案?

谢谢

更新:

该应用程序适用DEBUG于此配置

的package.json

...
"devDependencies": {
    "@babel/core": "7.0.0-beta.47",
    "@babel/plugin-proposal-decorators": "7.0.0-beta.47"
    ...
}
Run Code Online (Sandbox Code Playgroud)

.babelrc

{
  "presets": [
    ["react-native"]
  ],
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "legacy": true }]
  ]
}
Run Code Online (Sandbox Code Playgroud)

但在RELEASExCode崩溃时出现此错误:

babelHelpers.applyDecoratedDescriptor is not a function.
Run Code Online (Sandbox Code Playgroud)

更新2,工作配置:

这是我的工作配置:

的package.json

...
"devDependencies": {
   "@babel/core": "7.0.0-beta.47",
   "@babel/plugin-proposal-decorators": "7.0.0-beta.47",
   "@babel/runtime": "7.0.0-beta.47",
   "babel-jest": "23.2.0",
   "babel-preset-react-native": "5.0.2",
   "jest": "23.3.0",
   "react-test-renderer": "16.4.1"
}
...
Run Code Online (Sandbox Code Playgroud)

.babelrc

{
  "presets": [
    ["react-native"]
  ],
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "legacy": true }]
  ]
}
Run Code Online (Sandbox Code Playgroud)

然后在index.js(主应用程序启动文件)中我需要导入装饰器babel库:

index.js

import applyDecoratedDescriptor from '@babel/runtime/helpers/es6/applyDecoratedDescriptor';
import initializerDefineProperty from '@babel/runtime/helpers/es6/initializerDefineProperty';

Object.assign(babelHelpers, {applyDecoratedDescriptor, initializerDefineProperty});

require('./app.js');
Run Code Online (Sandbox Code Playgroud)

app.js

import {AppRegistry} from 'react-native';
import AppName from './app/index';

AppRegistry.registerComponent(appName, () => AppName);
Run Code Online (Sandbox Code Playgroud)

Ale*_*edi 11

好吧,我解决了所有的错误加入@babel/runtime,现在的应用程序工作在DEBUGRELEASE太.

这里配置正确:

的package.json

...
"devDependencies": {
  "@babel/core": "7.0.0-beta.47",
  "@babel/plugin-proposal-decorators": "7.0.0-beta.47",
  "@babel/plugin-transform-runtime": "7.0.0-beta.47",
  "@babel/runtime": "7.0.0-beta.47",
  "babel-jest": "23.2.0",
  "babel-preset-react-native": "5.0.2",
  "jest": "23.3.0",
  "react-test-renderer": "16.4.1"
}
...
Run Code Online (Sandbox Code Playgroud)

.babelrc

{
  "presets": [
    "react-native"
  ],
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "legacy": true }],
    ["@babel/plugin-transform-runtime", {
      "helpers": true,
      "polyfill": false,
      "regenerator": false
    }]
  ]
}
Run Code Online (Sandbox Code Playgroud)

谢谢@Hkan.

  • 我现在收到此错误,`[tid:com.facebook.react.JavaScript] TypeError:未定义不是对象(正在评估“ e.default”)。 (2认同)