Vue.js Vuex State Management

Managing global state with Vuex

Store Structure

import { createStore } from 'vuex';
const store = createStore({
    state() { return { count: 0 } },
    mutations: { },
    actions: { },
    getters: { }
});

State

state() {
    return {
        count: 0,
        user: null
    }
}
this.$store.state.count # access state

Mutations

mutations: {
    increment(state) { # synchronous only
        state.count++
    },
    setUser(state, user) { # with payload
        state.user = user
    }
}
this.$store.commit('increment'); # call mutation

Actions

actions: {
    async fetchUser({ commit }) { # asynchronous
        const user = await api.getUser();
        commit('setUser', user);
    }
}
this.$store.dispatch('fetchUser'); # call action

Getters

getters: {
    doubleCount(state) { # computed state
        return state.count * 2
    }
}
this.$store.getters.doubleCount # access getter

Modules

modules: {
    user: {
        namespaced: true, # namespace module
        state: { },
        mutations: { }
    }
}