Vue.js 更新Vuex数组中的对象项
我试图管理一个简单的购物车的产品。产品作为一个名为Vue.js 更新Vuex数组中的对象项,vue.js,vuex,Vue.js,Vuex,我试图管理一个简单的购物车的产品。产品作为一个名为项的数组存储在状态中 export const state = () => ({ cart: { items: [], } }) 如果一个产品已经添加到购物车中,并且有人试图再次添加它,我将尝试更新数量字段 addItem(state, product) { let cartProduct = state.cart.items.find((item, index) => { return item.id
项的数组存储在状态中
export const state = () => ({
cart: {
items: [],
}
})
如果一个产品已经添加到购物车中,并且有人试图再次添加它,我将尝试更新数量
字段
addItem(state, product) {
let cartProduct = state.cart.items.find((item, index) => {
return item.id === product.id
})
cartProduct.quantity++;
});
这对我不起作用,因为它没有更新状态。有人知道诀窍吗 这是反应性问题。您可以制作购物车的深度副本,使商店成为被动的:
addItem(state, product) {
let cartProduct = state.cart.items.find((item, index) => {
return item.id === product.id
})
cartProduct.quantity++;
state.cart = JSON.parse(JSON.stringify(state.cart))
});
另一个选项是使用Vue.set
它的反应性问题。您可以制作购物车的深度副本,使商店成为被动的:
addItem(state, product) {
let cartProduct = state.cart.items.find((item, index) => {
return item.id === product.id
})
cartProduct.quantity++;
state.cart = JSON.parse(JSON.stringify(state.cart))
});
另一个选项是使用Vue.set
使用.find(…)
来更改对象的值,而不是使用state.cart.map(…)
(使用if(item.id==product.id)…
直接更改购物车?state.cart.map
可能更好。然后您不需要执行JSON.parse(JSON.stringify())
使用.find(..)
来更改对象的值,而不是使用state.cart.map(..)
(使用if(item.id==product.id).
)来直接更改购物车?state.cart.map
可能更好。然后您不需要执行JSON.parse(JSON.stringify())