我正在学习MobX,无法理解为什么autorun
只会触发一次......
const {observable, autorun} = mobx;
class FilterStore {
@observable filters = {};
@observable items = [1,2,3];
}
const store = window.store = new FilterStore;
setInterval(() => {
store.items[0] = +new Date
}, 1000)
autorun(() => {
console.log(store.filters);
console.log(store.items);
console.log('----------------');
});
这是一个非常简单的设置,setInterval
每秒都会更改我的可观察数组的值,但autorun
没有被触发...任何想法为什么?
答案 0 :(得分:1)
...
setInterval
每秒都在改变我的可观察数组的值......
不,不是。它正在改变数组的内容,但不是可观察的MobX正在观看,这本身就是store.items
。更改 将如下所示:
store.items = [+new Date];
由于您未在store.items[0]
回调中访问autorun
,因此不会对其进行更改。 (console.log
确实访问过它,但不是MobX可以看到的。)
如果您 访问store.items[0]
,则会看到更改;如果您在数组中添加或删除,您可能还想明确访问length
:
autorun(() => {
store.filters;
store.items.length;
store.items.forEach(function() { } );
console.log('Update received');
});