gpt4 book ai didi

javascript - MobX 自动运行行为

转载 作者:搜寻专家 更新时间:2023-11-01 04:29:39 26 4
gpt4 key购买 nike

我正在探索 MobX 并被一个问题所吸引:

如果我有这个 observable:

class ItemsStore {
@observable items = [1,2,3];
}
const store = new ItemsStore;

然后像这样改变它:

setInterval(() => {
store.items[0] = +new Date
}, 1000)

我注意到以下几点:

这背后的API逻辑是什么?我希望由于 store.items 永远不会触发,未更改的属性 将表现相同。

为什么 MobX 知道我的回调中有什么代码?它是否在分析我传递给 autorun 的回调?

最佳答案

console.log(store.items)

当上次自动运行中取消引用的可观察对象发生更改时,将触发自动运行。 store.items 不会取消引用任何可观察对象。尝试 store.items.slice()store.items.toJS() 以获得所需的效果。

console.log(store.items[0])

这被触发是因为被取消引用的可观察对象发生了变化。

console.log(store.items.length)

这是运行的,因为 MobX 数组不是真正的数组。 length 属性为 defined as follows :

Object.defineProperty(ObservableArray.prototype, "length", {
enumerable: false,
configurable: true,
get: function(): number {
return this.$mobx.getArrayLength();
},
set: function(newLength: number) {
this.$mobx.setArrayLength(newLength);
}
});

getArrayLength reports that the MobX array has been observed :

getArrayLength(): number {
this.atom.reportObserved();
return this.values.length;
}

关于javascript - MobX 自动运行行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41087478/

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