Què és Vuex?
Vuex és una biblioteca de gestió d'estat per a aplicacions Vue.js. Proporciona un emmagatzematge centralitzat per a totes les dades de l'aplicació, permetent una gestió més eficient i organitzada de l'estat. Vuex segueix el patró Flux, que facilita la previsibilitat i la traçabilitat de l'estat de l'aplicació.
Característiques clau de Vuex:
- Emmagatzematge centralitzat: Totes les dades de l'aplicació es gestionen en un únic lloc.
- Estat reactiu: Quan l'estat canvia, les vistes que depenen d'aquest estat es tornen a renderitzar automàticament.
- Traçabilitat: Totes les mutacions de l'estat es registren, permetent una traçabilitat completa dels canvis.
- Integració amb DevTools: Vuex es pot integrar amb les DevTools de Vue per a una depuració més fàcil.
Instal·lació de Vuex
Pas 1: Instal·lar Vuex
Per instal·lar Vuex, pots utilitzar npm o yarn:
o
Pas 2: Configurar Vuex a la teva aplicació Vue
Després d'instal·lar Vuex, has de configurar-lo a la teva aplicació Vue. Aquí tens un exemple de com fer-ho:
// src/store/index.js import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++; } }, actions: { increment(context) { context.commit('increment'); } }, getters: { count: state => state.count } }); export default store;
// src/main.js import Vue from 'vue'; import App from './App.vue'; import store from './store'; new Vue({ store, render: h => h(App) }).$mount('#app');
Conceptes bàsics de Vuex
Estat (State)
L'estat és l'objecte que conté totes les dades de l'aplicació. És reactiu, el que significa que qualsevol canvi en l'estat es reflectirà automàticament a les vistes que depenen d'aquest estat.
Mutacions (Mutations)
Les mutacions són les úniques maneres de canviar l'estat a Vuex. Són funcions síncrones que reben l'estat com a primer argument i poden rebre un payload com a segon argument.
Accions (Actions)
Les accions són funcions que poden contenir operacions asíncrones. Les accions no modifiquen directament l'estat, sinó que cometen mutacions.
Getters
Els getters són funcions que permeten accedir a l'estat de manera derivada. Són similars a les propietats computades de Vue.
Exemple pràctic
A continuació, es mostra un exemple pràctic d'una aplicació Vue que utilitza Vuex per gestionar l'estat d'un comptador.
Component Vue
<template> <div> <p>{{ count }}</p> <button @click="increment">Increment</button> </div> </template> <script> import { mapGetters, mapActions } from 'vuex'; export default { computed: { ...mapGetters(['count']) }, methods: { ...mapActions(['increment']) } }; </script>
Store Vuex
// src/store/index.js import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++; } }, actions: { increment(context) { context.commit('increment'); } }, getters: { count: state => state.count } }); export default store;
Exercici pràctic
Exercici
Crea una aplicació Vue que utilitzi Vuex per gestionar l'estat d'una llista de tasques. La llista ha de permetre afegir i eliminar tasques.
Solució
Store Vuex
// src/store/index.js import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); const store = new Vuex.Store({ state: { tasks: [] }, mutations: { addTask(state, task) { state.tasks.push(task); }, removeTask(state, taskIndex) { state.tasks.splice(taskIndex, 1); } }, actions: { addTask(context, task) { context.commit('addTask', task); }, removeTask(context, taskIndex) { context.commit('removeTask', taskIndex); } }, getters: { tasks: state => state.tasks } }); export default store;
Component Vue
<template> <div> <input v-model="newTask" placeholder="Add a new task" /> <button @click="addTask(newTask)">Add Task</button> <ul> <li v-for="(task, index) in tasks" :key="index"> {{ task }} <button @click="removeTask(index)">Remove</button> </li> </ul> </div> </template> <script> import { mapGetters, mapActions } from 'vuex'; export default { data() { return { newTask: '' }; }, computed: { ...mapGetters(['tasks']) }, methods: { ...mapActions(['addTask', 'removeTask']) } }; </script>
Conclusió
En aquesta secció, hem après què és Vuex, com instal·lar-lo i configurar-lo, i hem explorat els conceptes bàsics com l'estat, les mutacions, les accions i els getters. També hem vist un exemple pràctic d'una aplicació Vue que utilitza Vuex per gestionar l'estat d'un comptador i hem realitzat un exercici pràctic per gestionar una llista de tasques. Amb aquests coneixements, estàs preparat per aprofundir en la gestió d'estat amb Vuex en les teves aplicacions Vue.js.
Curs de Vue.js
Mòdul 1: Introducció a Vue.js
- Què és Vue.js?
- Configuració de l'entorn de desenvolupament
- Creant la teva primera aplicació Vue
- Entenent la instància de Vue
Mòdul 2: Conceptes bàsics de Vue.js
- Sintaxi de plantilles
- Enllaç de dades
- Propietats computades i observadors
- Enllaços de classes i estils
- Renderització condicional
- Renderització de llistes
Mòdul 3: Components de Vue.js
- Introducció als components
- Props i esdeveniments personalitzats
- Slots
- Components dinàmics i asíncrons
- Comunicació entre components
Mòdul 4: Vue Router
- Introducció a Vue Router
- Configuració de Vue Router
- Rutes dinàmiques
- Rutes niades
- Guàrdies de navegació
Mòdul 5: Gestió d'estat amb Vuex
- Introducció a Vuex
- Estat, getters, mutacions i accions
- Mòduls a Vuex
- Utilitzant Vuex en components
- Patrons avançats de Vuex
Mòdul 6: Directives de Vue.js
Mòdul 7: Plugins de Vue.js
Mòdul 8: Proves en Vue.js
Mòdul 9: Conceptes avançats de Vue.js
- Funcions de renderització i JSX
- Renderització del costat del servidor (SSR) amb Nuxt.js
- API de composició de Vue 3
- Optimització del rendiment