MobX自动运行一次

时间:2016-12-11 14:25:18

标签: javascript reactjs mobx

我正在学习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没有被触发...任何想法为什么?

1 个答案:

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

Updated Fiddle