Mobx使用计算机监听值更改不起作用

时间:2017-10-18 07:45:19

标签: javascript mobx

我正在尝试使用mobx计算表达式来听取值更改,但是当我将新值推送到观察到的表达式时,我没有看到任何更改。

class List {
  @observable values = [];

  constructor() {
    computed(() => this.values).observe(changes => {
      console.log(changes);
    })
  }


  add(item) {
    this.values.push(Math.random());
  }

}

const list = new List();
list.add();

为什么它不起作用?

2 个答案:

答案 0 :(得分:2)

请注意,computed只会跟踪实际访问的数据。计算中访问的唯一数据是changes,一个指向数组的指针。向该数组推送新值不会更改指针。

记住:计算机生成值,反应和放大器。 autoruns产生副作用。

您的计算机永远不会产生新值,因此永远不会触发observer

答案 1 :(得分:0)

当您想从其他可观察对象派生新值时,使用

computed。您可以改为使用observe

示例(JSBin

class List {
  @observable values = [];

  constructor() {
    observe(this.values, (change) => {
      if (change.added) {
        console.log(`${change.added} got added to values`);
      }
    });
  }

  add(item) {
    this.values.push(Math.random());
  }
}

const list = new List();

setInterval(() => {
  list.add();
}, 1000);