在 mobx 中为 array.length 使用@computed?
Using @computed for array.length in mobx?
在 mobx 中,当使用 observable.array()
时,在 @computed
属性 中计算 .length
是否有意义,或者它已经以某种方式在内部缓存?
一般来说,什么样的属性在 @computed
中缓存是有意义的?我应该将它用于所有事情吗?是否会导致不必要的重新计算?
可观察数组的长度属性为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
中所获得的好处将减少到 none。
缓存您经常使用的计算是一种很好的做法。我个人将它用于从 @computed fullName() { return this.firstName + ' ' + this.lastName; }
到例如缓存 supercluster。这更多是一个品味问题,除非你正在处理更重的计算,当它变得非常有用时。
在 mobx 中,当使用 observable.array()
时,在 @computed
属性 中计算 .length
是否有意义,或者它已经以某种方式在内部缓存?
一般来说,什么样的属性在 @computed
中缓存是有意义的?我应该将它用于所有事情吗?是否会导致不必要的重新计算?
可观察数组的长度属性为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
中所获得的好处将减少到 none。
缓存您经常使用的计算是一种很好的做法。我个人将它用于从 @computed fullName() { return this.firstName + ' ' + this.lastName; }
到例如缓存 supercluster。这更多是一个品味问题,除非你正在处理更重的计算,当它变得非常有用时。