gpt4 book ai didi

javascript - 为什么不跟踪 js 类的 mobx 可观察属性,但跟踪 mobx 可观察对象的属性?

转载 作者:行者123 更新时间:2023-11-30 06:20:21 30 4
gpt4 key购买 nike

我是 mobx 的新手,我想对 Mobx 进行快速测试,看看我如何才能将它应用到我的项目中。

当我运行这段代码时

class Entity{
@observable version = 1;
}

let testEntity = new Entity();

let disposer = autorun(() => console.log(`Entity version : ${testEntity.version}`));

testEntity.version = 2;
testEntity.version = 3;

disposer();

我希望看到这个输出

Entity version : 1
Entity version : 2
Entity version : 3

但是,相反,我只看到实体版本:1

但是,如果我使用可观察的普通对象而不是具有可观察属性的类,我将获得所需的输出。示例:

let testEntity = observable({ version: 1 });

let disposer = autorun(() => console.log(`Entity version : ${testEntity.version}`));

testEntity.version = 2;
testEntity.version = 3;

disposer();
// this works and I see autorun firing three times instead of only the first.

所以我认为我应该使类实例可观察。

我使用了 let testEntity = observable(new Entity()); 但这引发了关于某些 .box 函数的错误。

我再次尝试,这次使用 let testEntity =observable.box(new Entity()); 并且我没有错误。

但是这次我得到了这个结果 Entity version: undefined

这是怎么回事,我怎样才能实现可观察的类实例?

也许我采用了错误的方法来解决我的问题。我想让我的领域对象作为类实例来添加一些业务逻辑,并在其中进行数据操作。

我已经阅读了关于 mobx 跟踪和不跟踪的文章,但似乎我仍然遗漏了一些东西。

最佳答案

我没有经常使用 autorun,但我认为问题是你在类之外调用 autorun。尝试将该行代码移动到您的类中:

class Entity{
@observable version = 1;

let disposer = autorun(() => console.log(`Entity version : ${version}`));
}

let testEntity = new Entity();



testEntity.version = 2;
testEntity.version = 3;

testEntity.disposer();

关于javascript - 为什么不跟踪 js 类的 mobx 可观察属性,但跟踪 mobx 可观察对象的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53536760/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com