【发布时间】:2017-05-02 19:53:53
【问题描述】:
我正在使用Vuex 商店将所有商品保存在购物车中。
商店有两个动作:
-
getCartContent,在页面加载时调用(从后端获取初始内容,然后从会话中检索数据) -
addToCart,由<Products>组件在用户单击添加到购物车按钮时调度。
这两个都调用了各自的突变(具有相同的名称),因为您不应该直接从组件内部调用突变。
这是商店的样子:
const store = new Vuex.Store({
state: {
items: [],
},
mutations: {
getCartContent(state, data){
axios.get('/api/cart').then(response => {
state.items = response.data;
});
},
addToCart(state, data){
axios.post('/api/cart/add', {
item_id: data.item,
});
}
},
actions: {
getCartContent(context){
context.commit('getCartContent');
},
addToCart(context, data){
context.commit('addToCart', {item: data.item});
}
}
});
这按预期工作,但是现在当一个项目被添加到购物车时(从组件内调度到 addToCart 操作),我希望它在之后调用 getCartContent 突变,以便它从后端获取新的项目列表。
我尝试从同一个操作中提交第二个突变,如下所示:
actions: {
// ...
addToCart(context, data){
context.commit('addToCart', {item: data.item});
context.commit('getCartContent');
}
}
但这并不总是有效,有时它会获取项目但并非总是如此。
我还尝试在分派 addToCart 操作之后立即从组件本身分派 getCartContent 操作,但这是同样的问题。
我该如何解决这个问题?
【问题讨论】:
-
可以在组件内调用
commit,没有问题。为异步代码保留操作。