Vuex计算属性,侦听getter不更新

时间:2018-06-19 11:03:33

标签: vue.js vuex

我有一个问题,我的计算属性(基本上只是调用具有id的商店getter)在商店更改时不会重新计算。谁知道为什么?

产品计算(isInCart是相关的,另一个只显示状态变化有效)

isInCart() {
    var isInCart = this.$store.getters['shoppingCart/isInCart'](this.product.id);
    return isInCart;
  }

Vuex商店

const getters = {
  count: state => state.items.length,
  hasItems: state => !!state.items.length,
  isInCart(state) {
    return id => state.items.findIndex((item) => {
      return item.productId === id; 
    }) > -1;
  }
}

状态变化是通过这样的突变完成的:

setCart(state, cart) {
    state.items = cart.items;
  },

对getter的初始调用按预期工作。只是当状态改变时,它不会再次运行。其他的吸气者" hasItem"和"计数"按预期工作。

我也尝试在我的组件中将函数直接放入计算中,如下所示:

computed: {
     ...mapState({
        isInCart(state) {
          var id = this.product.id;
          return !!state.shoppingCart.items.filter(item => item.productId === id).length
        }
      })
    },

1 个答案:

答案 0 :(得分:0)

这是因为getter返回一个函数。吸气剂所依赖的每个状态都是观察者。它观察这些依赖关系的变化。任何更改都可以触发吸气剂运行。但是,如果吸气剂仅返回一个函数,则不会获得该函数的结果。相反,您将获得具有更新值的函数的结果。