Sobes.tech
Junior

Spiega cos'è Vuex con le tue parole.

sobes.tech AI

Risposta dell'AI

Vuex è una libreria di gestione dello stato per applicazioni Vue.js. Si tratta di un magazzino centralizzato per tutti i componenti dell'applicazione, dove è possibile conservare dati che devono essere accessibili da diverse parti dell'applicazione senza doverli passare tramite props o eventi.

Vuex è composto dalle seguenti parti principali:

  • State: Oggetto che contiene tutti i dati condivisi dell'applicazione. È la "fonte unica di verità".
  • Getters: Funzioni per ottenere dati dallo stato. Sono simili alle proprietà calcolate nei componenti Vue.
  • Mutations: Funzioni che modificano direttamente lo stato. Sono sincrone. L'unico modo per cambiare lo stato è chiamare una mutation.
  • Actions: Funzioni che possono contenere operazioni asincrone. Non modificano direttamente lo stato, ma chiamano mutations.
  • Modules: Permettono di dividere lo store in moduli, ognuno con il proprio state, getters, mutations e actions, per applicazioni di grandi dimensioni.

Principio di funzionamento:

  1. I componenti ottengono dati dallo state tramite getters.
  2. Le azioni dell'utente (clic, input) chiamano actions.
  3. Le actions possono eseguire operazioni asincrone (ad esempio, richieste API).
  4. Le actions chiamano mutations per modificare lo state.
  5. Le modifiche allo state aggiornano automaticamente i componenti in modo reattivo.

Esempio di utilizzo:

Supponiamo di avere un contatore il cui valore deve essere accessibile da diversi componenti.

// 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>Contatore: {{ count }}</p>
    <p>Contatore raddoppiato: {{ doubleCount }}</p>
    <button @click="increment">Aggiungi</button>
    <button @click="decrement">Rimuovi</button>
    <button @click="incrementAsync">Aggiungi asincrono</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>

Vuex aiuta a organizzare la gestione dello stato dell'applicazione, rendendola più prevedibile e più facile da debug, specialmente in grandi e complessi progetti.