【发布时间】:2020-03-22 19:40:05
【问题描述】:
我在我的网络应用程序中为Products 创建了一个通用商店。自然,网站需要在不同页面上显示非常多不同类型的产品。所以我最终得到了多个状态来代表每个状态。这是我的商店:
const state = {
HomepageOffers:[],
Product: []
};
const getters = {
getHomepageOffers: (state) => state.HomepageOffers,
getProduct: (state) => state.Product
};
const actions = {
loadHomepageOffers({commit}) { // get all products to be featured on homepage
axios.get('/api/homepageoffers')
.then(response => {
commit('setHomepageOffers', response.data[0])
}).catch(function (error) {
console.log(error.response.data);
}
)
},
loadProduct(context, {ProductID}) { // gets a single product based on ProductID passed in URL
axios.get(`/api/${ProductID}`)
.then(response => {
context.commit('setProduct', response.data[0])
}).catch(function (error) {
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
}
)
}
};
const mutations = {
setHomepageOffers(state, HomepageOffers) {
state.HomepageOffers = HomepageOffers
},
setProduct(state, Product) {
state.Product = Product
}
};
export default {
state: state,
getters: getters,
actions: actions,
mutations: mutations
}
发生的情况是,当用户访问我的/home 页面时,HomepageOffers 状态会填满产品数据。伟大的。
当用户点击特定产品时,Product 状态会被单个产品项填充,然后 /Product.vue 组件会被加载。也很棒。
我唯一注意到的是,当获取单个产品时,HomepageOffers 状态并未清空 - 它仍然包含所有产品。我想这就是它应该如何工作,但我的问题是:是每个商店只有一个状态是安全/最佳做法,还是我可以在商店中有多个状态?
【问题讨论】:
-
您可以根据需要在商店中拥有任意数量的状态 - 您甚至可以将它们相互嵌套。
-
但是这样做安全吗?我最终会遇到内存/资源问题吗?我不明白 vuex 的实际工作原理......
-
把 Vuex 想象成一个大的 JavaScript 对象,它可以从应用程序的任何地方访问——就像你有
$root.myStore对象一样。 -
是的,它是正确的用法。你总是可以做一个突变来清除你想要的状态。好的做法是不要把不需要的东西放在店里。
标签: vue.js vuejs2 vuex vuex-modules