我有一个问题,我的计算属性(基本上只是调用具有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
}
})
},
答案 0 :(得分:0)
这是因为getter返回一个函数。吸气剂所依赖的每个状态都是观察者。它观察这些依赖关系的变化。任何更改都可以触发吸气剂运行。但是,如果吸气剂仅返回一个函数,则不会获得该函数的结果。相反,您将获得具有更新值的函数的结果。