尝试在数字类型上使用@observable时,不会创建Observable。这会导致出现问题,即每次获取计算值时都要重新计算。我不希望重新计算计算值,除非输入已更改,这是什么问题?
https://jsbin.com/mofirujixu/1/edit?html,js,console
class Square {
@observable width = 2;
@computed get area() {
console.log('calc area');
return this.width * this.width;
}
}
const square = new Square();
//prints out 'calc area' each time
console.log(square.area);
console.log(square.area);
console.log(square.area);
最佳答案
MobX仅在一个或多个观察者观察某个计算结果时才对其进行缓存。它是通过这种方式实现的,以减少内存占用并允许垃圾回收器完成其工作。
您可以在日志前使用简单的autorun
来查看实际效果:
class Square {
@observable width = 2;
@computed get area() {
console.log('calc area');
return this.width * this.width;
}
}
const square = new Square();
autorun(() => {
square.area;
// square.area is now observed by one observer,
// and will not be re-calculated for subsequent reads.
});
console.log(square.area);
console.log(square.area);
console.log(square.area);