Can I call commit from one of mutations in Vuex store

后端 未结 12 1190
醉酒成梦
醉酒成梦 2021-02-03 16:25

I have a vuex store, like following:

import spreeApi from \'../../gateways/spree-api\'
// initial state
const state = {
  products: [],
  categories: []
}

// mu         


        
12条回答
  •  渐次进展
    2021-02-03 17:25

    When you are already doing a mutation, there is no way to commit another mutation. A mutation is a synchronous call which changes the state. Within one mutation, you will not be able to commit another mutation.

    Here is the API reference for Vuex: https://vuex.vuejs.org/en/api.html

    As you can see, a mutation handler receives only state and payload, nothing more. Therefore you are getting commit as undefined.

    In your case above, you can set the PRODUCT and CATEGORIES as part of the same mutation handler as a single commit. You can try if the following code works:

    // mutations
    const mutations = {
        SET_PRODUCTS_AND_CATEGORIES: (state, response) => {
            state.products = response.data.products
            state.categories = state.products.map(function(product) { return product.category})
        },
        // ...
    }
    

    EDIT: Please refer to the answer below, provided by Daniel S. Deboer. The correct method is to commit two mutations from a single action, as described in his answer.

提交回复
热议问题