【问题标题】:Using @computed for array.length in mobx?在 mobx 中对 array.length 使用 @computed?
【发布时间】:2017-08-24 13:08:00
【问题描述】:

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

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

【问题讨论】:

    标签: javascript mobx


    【解决方案1】:

    可观察数组的长度属性是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。这更像是一个品味问题,除非您正在处理更繁重的计算,否则它会变得非常有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 2018-08-26
      • 1970-01-01
      • 2020-05-14
      • 2021-03-07
      • 2019-04-10
      相关资源
      最近更新 更多