我有一个vuex商店,如下所示:
import spreeApi from '../../gateways/spree-api'
// initial state
const state = {
products: [],
categories: []
}
// mutations
const mutations = {
SET_PRODUCTS: (state, response) => {
state.products = response.data.products
commit('SET_CATEGORIES')
},
SET_CATEGORIES: (state) => {
state.categories = state.products.map(function(product) { return product.category})
}
}
const actions = {
FETCH_PRODUCTS: (state, filters) => {
return spreeApi.get('products').then(response => state.commit('SET_PRODUCTS', response))
}
}
export default {
state,
mutations,
actions
}
我想称呼mutation:SET_CATEGORIES
from突变:SET_PRODUCTS
,但这给了我错误:
projectFilter.js:22未捕获(在承诺中)ReferenceError:未定义提交(…)
什么应该是正确的方法来做到这一点。我尝试了store.commit
和this.commit
,但是这些也给出了类似的错误。
编辑:我偶然发现了一个非常相似的问题,对我来说,解决方案是使用vuex getter:https ://vuex.vuejs.org/en/getters.html
您的类别实际上是产品的“计算”版本。将类别用作获取者可以使它们与产品保持同步,并避免重复存储中的数据。
为了回答标题中的问题,我保留了原始答案。
Daniel Buckmaster解决方案的替代方案:
如您所见,您可以直接调用突变本身。(正如Daniel所说的,毕竟它们只是简单的函数)
我相信这是对原始问题的更合适的答案:这是在没有代码重复或额外功能的情况下构成突变的一种实际方法。