Vuex-何时使用getter和何时使用state

时间:2018-09-18 12:01:47

标签: vue.js vuejs2 vuex

我很难弄清楚何时使用吸气剂或状态以获得最佳性能。

我将列出一些场景,欢迎您对它们进行评论:

方案1-吸气剂VS动作和吸气剂状态

在操作或获取程序中,如果您多次使用产品列表来查找结果,那么您将使用getters.products或state.products吗?

此外,如果您需要在同一函数中使用乘积10次,则将调用getters.products或state.products 10次,还是将乘积的开头分配给变量,然后再使用10次 时间?在其他方面是否有性能提升?

方案2-Getter返回函数

在Vuex文档中,它指出在getter中返回函数不会缓存该函数的结果。因此,用吸气剂对1000种产品进行分类是不好的,对吧?喜欢:

const getters = {
  sortedProducts: state => {
    return state.products.sort(a, b => {
      ...
    })
  }
}

因此,无论何时更新产品(可能会或可能不会更改排序),它都会再次进行整个计算,或者?

最好有一个状态,而该状态可以通过动作和突变手动更新?

通常,让吸气剂返回与大量数据有关的函数是否有意义?

1 个答案:

答案 0 :(得分:5)

Vuex getters 用于Vue 计算,而Vuex state 用于Vue 数据

场景1

  

在操作或获取程序中,如果您多次使用产品列表来查找结果,那么您将使用getters.products或state.products吗?

我不太了解您在这里的情况;一个代码示例可以更好地说明您的意思。

假设您处于products状态,该状态是一组产品对象。如果您需要在多个地方访问{em> sorted (例如)products,那么比起每次对sortedProducts进行排序,进行products的吸气会更好。因为Vue会缓存结果并且仅在products数组更改时重新计算其值。

  

此外,如果您需要在同一函数中使用产品10次,您会调用getters.products或state.products 10次,还是先将产品分配给变量,然后再使用10次?在其他方面是否有性能提升?

如果您担心性能,则无需在函数开头将其分配给变量。访问商店状态或获取方法的性能成本可以忽略不计。代码可读性在这里更重要。

场景2

sortedProducts getter函数不会返回函数,因此Vuex将缓存结果。

  

最好有一个状态,而该状态可以通过动作和突变手动更新?

如果您正在谈论自己的sortedProducts吸气剂,则不会。

  

通常,让吸气剂返回与大量数据有关的函数是否有意义?

唯一需要getter返回函数的情况是,您希望getter能够接受参数,在这种情况下,getter更像是Vue组件 method 而不是Vue组件的 computing 属性。

如果您有一个返回一个函数并处理大量数据的getter,则Vuex无法帮助您缓存该函数调用的结果。您必须找出一种方法来最大程度地减少调用它的次数,或者并入memoization等。