# Mutations
Agora iremos implementar nossa mutation do usuario.
Vamos no nosso store:
./src/store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
usuario: {
conta: '',
senha: '',
},
},
actions: {
usuarioLogado(context, usuario) {
context.commit('usuarioLogado', usuario);
},
},
mutations: {
usuarioLogado(state, payload) {
state.usuario = payload;
},
},
modules: {
},
});
O primeira argumento, state é a forma que iremos acessar o nosso estado, assim causando mutação.
O segundo argumento, payload é tudo oque estamos recebendo da nossa action.
Causando mutação, o estado irá emitir o evento para o mapState (podemos também acessar a loja diretamente por this.$store.state.usuario, por exemplo).
Acessando o /dashboard
, poderá ver que nosso Olá ...
voltou a funcionar!
- IMPORTANTE!: A loja só ira existir em quanto o usuario estiver navegando, ele NÃO possui o mesmo funcionamento do localStorage. Uma forma de resolver esse problema é sempre que App.vue for construido, requisitar o localStorage que está com o id do usuário, buscar o usuário na API e dar dispach para o Vuex, assim conseguimos fazer que a conta do usuário seja lembrada até ele querer deslogar.
Exemplo:
./src/App.vue
<template>
<transition name="router" mode="out-in">
<router-view />
</transition>
</template>
<script>
export default {
mounted() {
const id = localStorage.getItem('ID');
this.$http.get('/users', { headers: id })
.then(res => {
this.$store.dispatch('USUARIO', res.data());
})
.catch(err => {
console.error(err);
})
},
};
</script>
- Iremos ensinar a como configurar o axios e até mesmo usar o http padrão do Vue, não se preocupe.
Na próxima seção, iremos introduzir o conteúdo sobre Getters, nos vemos lá!