Vuex 监视的属性缓存是否像 Vue 的计算属性一样?



在 Vue 文档中提到,计算属性是智能缓存的,而不是使用常规方法:

相比之下,每当发生重新呈现时,方法调用将始终运行该函数。为什么我们需要缓存?想象一下,我们有一个昂贵的计算属性......

我的问题是:Vuex 监视的属性是否也像计算属性一样具有缓存?(包括 Vuex 观看,例如使用 vm.$store.watch...

虽然索拉布的回答没有错,但我觉得它并没有真正回答这个问题。

答案是:不,观察者

没有被"缓存"——这毫无意义,因为观察者是具有副作用的函数,但没有返回值,不能用作属性。

因此,为观察者缓存任何内容是没有必要或不明智的。

但是,是的,两者都仅在监视的数据更改时执行。

watchers的行为

将与computed的行为相同,因为computed是使用 watchers 在内部实现的。当定义一个computed属性时,Vue 在内部对计算属性中使用的变量设置了一个观察器,请参阅下面的源代码代码:

function makeComputedGetter (getter: Function, owner: Component): Function {
  const watcher = new Watcher(owner, getter, noop, {
    lazy: true
  })
  return function computedGetter () {
    if (watcher.dirty) {
      watcher.evaluate()
    }
    if (Dep.target) {
      watcher.depend()
    }
    return watcher.value
  }
}

因此,当反应数据发生变化时,用computedwatch块编写的代码将只执行一次。

相关内容

最新更新