【发布时间】:2017-08-24 13:08:00
【问题描述】:
在 mobx 中,当使用 observable.array() 时,在 @computed 属性中计算 .length 是否有意义,或者它已经在内部以某种方式缓存?
一般来说,在@computed 中缓存什么样的属性是有意义的?我应该将它用于一切吗?会不会导致不必要的重新计算?
【问题讨论】:
标签: javascript mobx
在 mobx 中,当使用 observable.array() 时,在 @computed 属性中计算 .length 是否有意义,或者它已经在内部以某种方式缓存?
一般来说,在@computed 中缓存什么样的属性是有意义的?我应该将它用于一切吗?会不会导致不必要的重新计算?
【问题讨论】:
标签: javascript mobx
可观察数组的长度属性是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; } 到例如缓存的supercluster。这更像是一个品味问题,除非您正在处理更繁重的计算,否则它会变得非常有用。
【讨论】: