3

我正在学习 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('----------------');
});

jsFiddle:https ://jsfiddle.net/1vmtzn27/

这是一个非常简单的设置,setInterval每秒都在改变我的可观察数组的值,但autorun没有被触发......知道为什么吗?

4

1 回答 1

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');
});

更新小提琴

于 2016-12-11T14:33:51.003 回答