3

I am learning MobX and cannot understand why autorun is only firing once...

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/

This is a very simple setup, and the setInterval is changing the value of my observable array every second but autorun is not fired... any idea why?

4

1 に答える 1

1

...そして、setInterval監視可能な配列の値を毎秒変更しています...

いいえ、そうではありません。配列の内容を変更していますが、監視可能な MobXstore.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 に答える