Junior
Explique o que é o Vuex com suas próprias palavras.
sobes.tech IA
Resposta da IA
O Vuex é uma biblioteca de gestão de estado para aplicações Vue.js. É um armazenamento centralizado para todos os componentes da aplicação, onde pode guardar dados que devem estar acessíveis a partir de diferentes partes da aplicação sem necessidade de os passar através de props ou eventos.
O Vuex consiste nas seguintes partes principais:
- State: Objeto que contém todos os dados comuns da aplicação. É a "fonte única de verdade".
- Getters: Funções para obter dados do estado. São semelhantes às propriedades computadas nos componentes Vue.
- Mutations: Funções que modificam diretamente o estado. São síncronas. A única forma de alterar o estado é chamando uma mutation.
- Actions: Funções que podem conter operações assíncronas. Não modificam o estado diretamente, mas chamam mutations.
- Modules: Permitem dividir o armazenamento em módulos, cada um com o seu próprio state, getters, mutations e actions, para aplicações grandes.
Princípio de funcionamento:
- Os componentes obtêm dados do
stateatravés degetters. - As ações do utilizador (cliques, entradas) chamam
actions. Actionspodem realizar operações assíncronas (por exemplo, pedidos a API).Actionschamammutationspara modificar ostate.- As alterações no
stateatualizam automaticamente os componentes de forma reativa.
Exemplo de uso:
Suponhamos que temos um contador cujo valor deve estar acessível a partir de diferentes componentes.
// store.js
import { createStore } from 'vuex';
const store = createStore({
state() {
return {
count: 0
};
},
mutations: {
increment(state) {
state.count++;
},
decrement(state) {
state.count--;
}
},
actions: {
incrementAsync({ commit }) {
setTimeout(() => {
commit('increment');
}, 1000);
}
},
getters: {
doubleCount(state) {
return state.count * 2;
}
}
});
export default store;
<!-- Component.vue -->
<template>
<div>
<p>Contador: {{ count }}</p>
<p>Contador duplicado: {{ doubleCount }}</p>
<button @click="increment">Adicionar</button>
<button @click="decrement">Remover</button>
<button @click="incrementAsync">Adicionar assíncronamente</button>
</div>
</template>
<script>
import { useStore } from 'vuex';
import { computed } from 'vue';
export default {
setup() {
const store = useStore();
const count = computed(() => store.state.count);
const doubleCount = computed(() => store.getters.doubleCount);
const increment = () => store.commit('increment');
const decrement = () => store.commit('decrement');
const incrementAsync = () => store.dispatch('incrementAsync');
return {
count,
doubleCount,
increment,
decrement,
incrementAsync
};
}
};
</script>
O Vuex ajuda a organizar a gestão do estado da aplicação, tornando-o mais previsível e fácil de depurar, especialmente em projetos grandes e complexos.