Я создаю страницу корзины покупок, используя Vuejs и Vuex. Каждый товар в корзине должен иметь счетчик количества, чтобы увеличить или уменьшить количество товаров, заказанных для данного товара c. Когда я добавляю товары в корзину с главной страницы товаров, тогда посещаю страницу корзины. Я нажимаю на счетчик, и количество продукта изменяется, но пользовательский интерфейс не показывает это изменение. Изменения отображаются только после перезагрузки страницы, и после этого могут отображаться любые новые изменения только для этого указанного счетчика c, и после добавления каждого продукта мне приходится перезагружать только для того, чтобы его счетчик отображал изменения пользовательского интерфейса.
Это упрощенный компонент корзины Vue:
<template >
<tbody>
<tr v-for="product in cartProducts" :key="product.name">
<td class="quantity">
<i class="fa fa-minus" @click="decreaseQuantity(product)"></i>
<p>{{product.quantity}}</p>
<i class="fa fa-plus" @click="increaseQuantity(product)"></i>
</td>
</tr>
</tbody>
</template>
<script>
export default {
computed: {
cartProducts() {
return this.$store.state.cartProducts;
},
},
methods: {
increaseQuantity(drug) {
const existedDrug = this.cartProducts.find(d => d.id === drug.id);
existedDrug.quantity += 1;
this.$store.dispatch("setUserDataCart", this.cartProducts);
console.log(this.$store.state.cartProducts);
},
decreaseQuantity(drug) {
const existedDrug = this.cartProducts.find(d => d.id === drug.id);
existedDrug.quantity -= 1;
this.$store.dispatch("setUserDataCart", this.cartProducts);
console.log(this.$store.state.cartProducts);
},
},
};
</script>
И это мое хранилище vuex:
import Vue from "vue";
import Vuex from "vuex";
import VuexPersist from "vuex-persist";
Vue.use(Vuex);
const vuexPersist = new VuexPersist({
key: "my-app",
storage: window.localStorage
});
const store = new Vuex.Store({
state: {
cartProducts: []
},
mutations: {
SET_USER_CART(state, data) {
state.cartProducts = data;
}
},
actions: {
setUserDataCart({ commit }, data) {
commit("SET_USER_CART", data);
}
},
plugins: [vuexPersist.plugin]
});
export default store;
Я пробовал несколько подходов, таких как mapState
или использование состояния. как getter
но не повезло. Кто-нибудь может определить, что я делаю не так?