Sobes.tech
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:

  1. Os componentes obtêm dados do state através de getters.
  2. As ações do utilizador (cliques, entradas) chamam actions.
  3. Actions podem realizar operações assíncronas (por exemplo, pedidos a API).
  4. Actions chamam mutations para modificar o state.
  5. As alterações no state atualizam 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.