Junior
Explica qué es Vuex con tus propias palabras.
sobes.tech AI
Respuesta de la IA
Vuex es una biblioteca de gestión de estado para aplicaciones Vue.js. Es un almacén centralizado para todos los componentes de la aplicación, donde se pueden guardar datos que deben estar disponibles desde diferentes partes de la aplicación sin necesidad de pasarlos a través de props o eventos.
Vuex consta de las siguientes partes principales:
- Estado: Objeto que contiene todos los datos compartidos de la aplicación. Es la "fuente única de la verdad".
- Getters: Funciones para obtener datos del estado. Son similares a las propiedades computadas en componentes Vue.
- Mutations: Funciones que modifican directamente el estado. Son síncronas. La única forma de cambiar el estado es llamando a una mutation.
- Actions: Funciones que pueden contener operaciones asíncronas. No modifican el estado directamente, sino que llaman a mutations.
- Modules: Permiten dividir el almacén en módulos, cada uno con su propio estado, getters, mutations y actions, para aplicaciones grandes.
Principio de funcionamiento:
- Los componentes obtienen datos del
statea través degetters. - Las acciones del usuario (clics, entradas) llaman a
actions. Actionspueden realizar operaciones asíncronas (por ejemplo, solicitudes a API).Actionsllaman amutationspara modificar elstate.- Los cambios en el
stateactualizan reactiva y automáticamente los componentes.
Ejemplo de uso:
Supongamos que tenemos un contador cuyo valor debe estar disponible desde 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">Agregar</button>
<button @click="decrement">Quitar</button>
<button @click="incrementAsync">Agregar así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>
Vuex ayuda a organizar la gestión del estado de la aplicación, haciéndola más predecible y fácil de depurar, especialmente en proyectos grandes y complejos.