我正在尝试使用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();
为什么它不起作用?
答案 0 :(得分:2)
请注意,computed
只会跟踪实际访问的数据。计算中访问的唯一数据是changes
,一个指向数组的指针。向该数组推送新值不会更改指针。
记住:计算机生成值,反应和放大器。 autoruns产生副作用。
您的计算机永远不会产生新值,因此永远不会触发observer
。
答案 1 :(得分:0)
示例(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);