Я наблюдал за одним курсом Vuex, и до сих пор все было хорошо, пока они не включили функцию стрелки в геттер, а затем не использовали ее в вычисляемом свойстве и действии.Код следующий:
структура элемента:
const _products = [
{ id: 1, title: "iPad 4 Mini", price: 500.01, inventory: 2 },
{ id: 2, title: "H&M T-Shirt White", price: 10.99, inventory: 10 },
{ id: 3, title: "Charli XCX - Sucker CD", price: 19.99, inventory: 5 }
];
геттер в store.js
:
productIsInStock() {
return product => {
return product.inventory > 0;
};
}
действие в store.js
, которое использует этот геттер:
addProductToCart(context, product) {
if (context.getters.productIsInStock(product)) {
let cartItem = context.state.cart.find(item => item.id === product.id);
if (!cartItem) {
context.commit("pushProductToCart", product.id);
} else {
context.commit("incrementItemQuantity", cartItem);
}
context.commit("decrementProductInventory", product);
}
},
вычисленный, который использует этот геттер и шаблон, ProductList.vue
:
<template>
<li v-for="(product, index) in products" v-bind:key="index">
{{product.title}} - {{product.price | currency}} - {{product.inventory}}
<button
@click="addProductToCart(product)"
:disabled="!productIsInStock(product)"
>
Add product to cart
</button>
</li>
</template>
// ...
computed: {
products() {
return this.$store.state.products;
},
productIsInStock() {
return this.$store.getters.productIsInStock;
}
},
Это полностью работает, но я не понимаю почему.Главным образом я не понимаю, как этот геттер работает как в вычисляемом, так и в операторе if.Я попытался повторить ту же структуру в консоли, но по какой-то причине это не сработало вообще.Надеюсь, я предоставил достаточно кода