有没有实际的例子来掩饰同步和异步操作,比如说一个案例
时间: 2024-04-12 12:26:34 浏览: 171
当然,下面是一个简单的例子来说明 `dispatch` 和 `commit` 的区别。
假设你有一个购物车的功能,你需要添加商品到购物车,并且在添加商品后,需要更新购物车的总价。
```javascript
// Vuex store
const store = new Vuex.Store({
state: {
cart: [],
total: 0
},
mutations: {
addToCart(state, product) {
state.cart.push(product);
},
updateTotal(state) {
state.total = state.cart.reduce((total, product) => {
return total + product.price;
}, 0);
}
},
actions: {
addToCart({ commit }, product) {
// 模拟异步请求
setTimeout(() => {
commit('addToCart', product);
commit('updateTotal');
}, 1000);
}
}
});
```
在上面的例子中,我们有一个状态 `cart` 用于存储购物车中的商品列表,还有一个状态 `total` 用于存储购物车的总价。我们定义了两个 mutation:`addToCart` 和 `updateTotal`。`addToCart` 负责向购物车中添加商品,`updateTotal` 负责更新购物车的总价。
然后,我们定义了一个 action `addToCart`,在这个动作中,我们模拟了一个异步请求的情况,在异步请求完成后,我们先调用 `commit('addToCart', product)` 将商品添加到购物车中,然后再调用 `commit('updateTotal')` 更新购物车的总价。
这里使用了 `dispatch` 来触发异步动作 `addToCart`,示例代码中使用了 `setTimeout` 来模拟异步请求的延迟。
总结:在这个案例中,我们使用 `dispatch` 触发了一个异步动作 `addToCart`,在该动作中通过 `commit` 提交变更。这样可以确保异步操作在适当的时机完成,并且能够同步更新状态。
阅读全文