Vuex Pattern
1 min readNov 5, 2020
main.js
// main.jsimport Vue from 'vue';
import store from './store';
import App from './App';new Vue({
store,
render: h => h(App),
}).$mount('#app');
store/index.js
// store/index.jsimport Vue from 'vue';
import Vuex from 'vuex';
import auth from './modules/auth';Vue.use(Vuex);export default new Vuex.Store({
modules: {
auth,
}
});
store/modules/auth.js
// store/modules/auth.jsconst state = {
token: null,
}const getters = {
isLoggedIn: (state) => !!state.token,
}const mutations = {
setToken: (state, token) => {
state.token = token;
},
}const actions = {
login:({commit}, token) => {
commit('setToken', token);
},
logout: ({commit}) => {
commit('setToken', null);
},
}export default {
state,
getters,
mutations,
actions,
}
App.vue
// App.vue<template>
<div>
<a v-if="isLoggedIn" href="#" @click="logout">Logout</a>
<a v-else href="#" @click="$_login">Login</a>
</div>
</template><script>
import { mapActions, mapGetters } from 'vuex';export default {
name: 'App',
computed: mapGetters(['isLoggedIn']),
methods: {
...mapActions(['login', 'logout']),
$_login() {
this.login('this-is-a-token');
},
},
}
</script>