在 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。这更多是一个品味问题,除非你正在处理更重的计算,当它变得非常有用时。