英文:
How to load the store in vue when the app first loads
问题
我想在应用程序加载时调用getProducts
。我能够在Vue2中实现这一点,但不确定如何在Vue的新组合API版本中实现。请问有人可以建议我如何做到这一点吗?
英文:
I am trying to load products from my pinia store when my Vue app first loads.
This is my app.js
import {createApp} from "vue";
import App from "./App.vue";
import router from "./Router/index";
import { createPinia } from "pinia";
createApp(App)
.use(router)
.use(createPinia())
.mount("#app")
And this is my store:
import { defineStore } from "pinia";
import axios from "axios";
const state = {
cart: [],
order: {},
customer: {},
loading: true,
error: null,
products: [],
};
export const useCartStore = defineStore("shopState", {
state: () => state,
actions: {
async getProducts() {
try {
this.loading = true;
const response = await axios.get("/api/product");
this.products = response.data.data;
this.loading = false;
} catch (error) {
this.error = error;
}
},
addToCart({ item }) {
const foundProductInCartIndex = this.cart.findIndex(
(cartItem) => item.slug === cartItem.slug
);
if (foundProductInCartIndex > -1) {
this.cart[foundProductInCartIndex].quantity += 1;
} else {
item.quantity = 1;
this.cart.push(item);
}
},
removeProductFromCart({ item }) {
this.cart.splice(this.cart.indexOf(item), 1);
},
clearCart() {
this.cart.length = 0;
},
clearCustomer() {
this.customer = {};
},
clearOrder() {
this.order = {};
},
updateCustomer(customer) {
this.customer = customer;
},
updateOrder(order) {
this.order = order;
},
getSingleProduct(slug) {
return this.products.find((product) => product.slug === slug);
},
},
getters: {
getCartQuantity() {
return this.cart.reduce(
(total, product) => total + product.quantity,
0
);
},
getOrderDetails() {
return this.order;
},
getCartContents() {
return this.cart;
},
getCustomer() {
return this.customer;
},
getCartTotal() {
return this.cart.reduce(
(total, product) => total + product.price * product.quantity,
0
);
},
},
persist: true,
});
I would like to call getProducts
when the app loads. I am able to do this using Vue2 but not sure how to do this with the new composition API version of Vue. Please can someone advise how I can do this?
答案1
得分: 1
如果你想在应用程序加载后加载产品,你可以在组合 API 中使用 onMounted()
钩子。
在你想加载产品的组件中:
<script setup>
import { onMounted } from 'vue';
import { useCartStore } from '../stores/storeName.js';
const store = useCartStore();
onMounted(() => {
store.getProducts();
});
</script>
注意:我在这里使用了 <script setup>
。但如果你使用 setup()
钩子,你需要手动返回该函数。
参考链接:https://vuejs.org/api/composition-api-lifecycle.html#onmounted
如果你要加载产品,可以在应用程序加载后使用组合 API 中的 onMounted()
钩子。
英文:
If you want to load the products once the app is loaded, you can use the onMounted()
hook in the composition API.
https://vuejs.org/api/composition-api-lifecycle.html#onmounted
On the component where you want to load the products:
<script setup>
import { onMounted } from 'vue';
import { useCartStore } from '../stores/storeName.js';
const store = useCartStore()
onMounted(() => {
store.getProducts()
})
</script>
Note: I'm using <script setup>
here. But if you're using the setup()
hook you need to manually return the function
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论