# States
Agora, vamos implementar o objeto usuario, para conseguirmos ter todos os dados sem precisar requisitar novamente a API.
Primeiramente, vamos criar em nosso estado:
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
usuario: {
conta: '',
senha: '',
},
},
mutations: {
},
actions: {
},
modules: {
},
});
- O estado do Vuex é criado junto com o que será montado na instância, no nosso caso App.js, então é possivel requisitar o localStorage diretamente, por exemplo:
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
autenticado: localStorage.getItem('AUTENTICADO') || '',
},
});
# mapState
Para conseguirmos acessar no template, iremos utilizar o mapState:
import { mapState } from 'vuex';
export default {
// ...
computed: {
...mapState(['usuario']);
},
};
Estamos desconstruindo para conseguirmos utilizar outros conteúdos na nossa computed
o mapState precisa ficar na computed para que quando o valor que está no store for mudado, o mapState consiga escutar a alteração e exibir em tempo real no template.
# Aplicando no Projeto
Em nossa aplicação, iremos retirar o nosso localStorage com os dados do usuário e substituir para o nosso usuário do estado:
./src/pages/Login.vue
<script>
export default {
data() {
return {
conta: '',
senha: '',
};
},
methods: {
enviarFormulario() {
// validação futura
// GET para a rota em uma possível API
localStorage.setItem('AUTENTICADO', true);
this.$router.push('/dashboard');
},
},
};
</script>
./src/pages/Dashboard.vue
<v-list-item>
<v-list-item-content>
<v-list-item-title>Olá {{ usuario.conta }}!</v-list-item-title>
<v-list-item-subtitle>Drawer</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
<script>
import { mapState } from 'vuex';
export default {
data() {
return {
items: [
{
titulo: 'Dashboard',
icon: 'mdi-view-dashboard',
href: '/dashboard',
},
{
icon: 'mdi-inbox',
titulo: 'Inbox',
href: '/dashboard/inbox',
},
{
icon: 'mdi-star',
titulo: 'Star',
href: '/dashboard/star',
},
{
icon: 'mdi-send',
titulo: 'Send',
href: '/dashboard/send',
},
{
icon: 'mdi-email-open',
titulo: 'Drafts',
href: '/dashboard/drafts',
},
],
color: 'primary',
right: true,
miniVariant: false,
expandOnHover: false,
background: false,
};
},
methods: {
redirecionar(href) {
this.$router.push(href);
},
},
computed: {
...mapState(['usuario']),
},
};
</script>
- Vamos exibir agora no template pelo
usuario.conta
e não porconta
Podemos buscar outros conteúdos que estão no estado, por exemplo:
computed: {
...mapState([
'a'
'b',
'c',
]),
},
Na próxima seção iremos implementar o dispatch no Login, nos vemos lá!