在mobx中使用@computed用于array.length?

时间:2017-08-24 13:08:00

标签: javascript mobx

在mobx中,使用observable.array()时,在.length属性中计算@computed是否有意义,或者内部已经以某种方式进行缓存?

一般来说,在@computed中缓存哪种属性是有意义的?我应该把它用于一切吗?它可能会导致不必要的重新计算吗?

1 个答案:

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