【问题标题】:mobx - Leading decorators must be attached to a class declarationmobx - 主要装饰器必须附加到类声明
【发布时间】:2017-04-04 21:55:21
【问题描述】:

我想使用 MobX 装饰器,但是当我尝试运行我的代码时,我收到以下错误消息:

Leading decorators must be attached to a class declaration

我的应用程序将数据存储在 nedb 的数据存储区中,我想用 mobx 观察它们。

例如,如果我有以下代码:

import { observable } from 'mobx';
import Datastore from 'nedb';

@observable projectsDb = new Datastore({
    filename: __dirname + './projects.json',
    autoload: true,
    timestampData: true,
});

export default projectsDb;

当我启动我的 Electron 应用程序时,我使用以下命令:

"browserify -t [ babelify --presets [ react es2015 stage-1] --plugins [transform-decorators-legacy] ] app/app.jsx -o app/js/app.js && stylus app/css/styles.styl -o app/css/styles.css && electron app/main.js",

此外,所有 devDepenendencies 和 Dependencies 都添加到我的 package.json 中。

我的“开始”命令是否有任何错误或对 observable 的概念有任何误解?

【问题讨论】:

  • 我认为 observable 装饰器只能用于类属性。尝试将projectsDb 设为类属性,看看它是否改变了任何东西。另外,我会尝试将projectsDb 包装在一个对象中,看看它是否会改变任何东西(不确定它是否是一个正确的解决方案,只是看看它是否有效)。
  • @DorWeid 谢谢你的建议。我将我的 projectsDb 包装在一个类中并使用了“可观察”装饰器,没有出现错误。现在我希望我的应用逻辑能够正常工作。

标签: reactjs electron mobx


【解决方案1】:

装饰器(通常)不能应用于变量,只能应用于类和属性。但是,observable 也可以作为函数调用(所以没有@),然后您也可以将对象放入其中。

附:请注意,MobX 确实修改了外部库的内部结构,因此将整个数据库类传递给 observable 不会神奇地使整个数据库库反应,它只会为数据库创建一个 observable reference

【讨论】:

  • 感谢您的回答。因此,如果我让您正确地使这些数据存储具有反应性,我必须将数据存储包装在一个类中,并声明包含这些数据存储值的变量。然后在这个新类中声明一个修改数据库然后刷新变量的函数?这行得通吗?
  • 是的,这应该是一个好的开始。一旦您的数据存储在 observables 中,您就可以开始为它工作。要在更新时同步到数据库等,您可以使用反应/自动运行。而对于另一种方式,数据库可能有订阅机制?或者只是在初始读取时同步
  • 我使用 nedb 作为我的本地数据库。据我所知,遗憾的是它没有订阅方法。我想我会继续同步初始变量。非常感谢您的帮助。
【解决方案2】:

装饰器后面的分号可以去掉:

转这个:

@inject(CssAnimator);

到这里:

@inject(CssAnimator)

【讨论】:

    猜你喜欢
    • 2016-11-26
    • 1970-01-01
    • 2023-03-30
    • 2021-01-04
    • 1970-01-01
    • 2023-01-28
    • 2014-11-07
    • 2021-09-29
    相关资源
    最近更新 更多