【问题标题】:MobX @observable decorator removes a field from a storeMobX @observable 装饰器从商店中删除一个字段
【发布时间】:2016-11-07 19:47:16
【问题描述】:

我正在尝试了解 MobX 并创建一个简单的商店:

import { observable, autorun, computed } from "mobx";

class SomeStore {
  @observable someField = "";
}

const store = new SomeStore();
window.store = store;
export default store;

window.store 不包含字段someField。没有这个装饰器字段存在于对象中。 webpack.config 中的加载器:

module: {
        loaders: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                query: {
                    presets: ["react", "es2015"],
                    plugins: ["react-html-attrs", "transform-class-properties", "transform-decorators-legacy"]
                },
                loader: "babel"
            }
        ]
    }

【问题讨论】:

  • 如何检查对象是否有someField?我认为 mobx 为该字段创建了一个 getter,因此它可能不会在对象上显示为普通字段。试试window.store.someField 看看你会得到什么。
  • window.store.someField 返回未定义
  • 这绝对不是正常行为。您能否检查是否有任何其他模块覆盖window.store?看看这个小提琴:jsfiddle.net/mdebbar/uyjoq1s0/4 它工作得很好。
  • 我已经检查过了,任何模块都不会覆盖window.store。我什至尝试过window.storeWithSuperUniqueName= store;,结果是一样的。似乎这是一些独特的问题。感谢您尝试帮助我!但是我会尝试使用 redux 来完成我的任务,因为我没有更多的力量去尝试了解发生了什么问题。

标签: javascript mobx


【解决方案1】:

插件"transform-decorators-legacy" 应该在您的插件列表中排在第一位。 babel 装饰器重写需要在转换类属性之前发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 2018-06-11
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多