在mobx中,使用observable.array()
时,在.length
属性中计算@computed
是否有意义,或者内部已经以某种方式进行缓存?
一般来说,在@computed
中缓存哪种属性是有意义的?我应该把它用于一切吗?它可能会导致不必要的重新计算吗?
答案 0 :(得分:2)
可观察数组的length属性为defined as follows:
Object.defineProperty(ObservableArray.prototype, "length", {
enumerable: false,
configurable: true,
get: function(): number {
return this.$mobx.getArrayLength()
},
set: function(newLength: number) {
this.$mobx.setArrayLength(newLength)
}
})
所有this.$mobx.getArrayLength
都is the following:
getArrayLength(): number {
this.atom.reportObserved()
return this.values.length
}
在@computed
中缓存它所带来的好处将是微不足道的。
缓存经常使用的计算是一种很好的做法。我个人将它用于从@computed fullName() { return this.firstName + ' ' + this.lastName; }
到例如tr.collapsed {
visibility: collapse;
line-height: 0;
}
tr.collapsed * {
padding: 0;
border: none;
}
的所有内容。缓存supercluster。这是一个品味问题,除非你处理更重的计算,当它变得非常有用时。