Gestión de Estado con Vuex en Aplicaciones Vue.js

Vuex es una solución de gestión de estado para Vue.js que facilita el intercambio de datos entre componentes independientes. Cuando un componente modifica datos compartidos, otros componentes que utilizan esos mismos datos se actualizan de manera reactiva. No obstante, al recargar la página, cualquier estado almacenado en Vuex se restablece a su valor inicial, por lo que es común emplear almacenamiento local para persistencia.

El uso de Vuex resulta esencial en aplicaciones donde múltiples vistas dependen del mismo conjunto de datos, o cuando distintas acciones necesitan alterar un estado común. Las características principales incluyen:

  • El almacenamiento de estado es raectivo: los componentes que leen del almacén se actualizan automáticamente cuando el estado cambia.
  • No se permite modificar el estado directamente; todos los cambios deben realizarse mediante mutaciones explícitas, lo que facilita el seguimiento de las actualizaciones.

Instalación de Vuex

npm install vuex --save

Configuración del Almacén Global

Se crea un archivo dedicado para el almacén, por ejemplo en /src/store/index.js. En el siguiente ejemplo, se utiliza localStorage para retener datos entre sesiones:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
    state: {
        datosUsuario: JSON.parse(localStorage.getItem('user')) || null
    },
    mutations: {
        actualizarUsuario(state, payload) {
            localStorage.setItem('user', JSON.stringify(payload));
            state.datosUsuario = payload;
        }
    },
    getters: {
        obtenerUsuario(state) {
            return state.datosUsuario || JSON.parse(localStorage.getItem('user'));
        }
    }
});

Integración Global del Almacén

Para hacer el almacén accesible en toda la aplicación, se puede asignar al prototipo de Vue o instanciar directamente en la raíz de la app:

import store from './store';

// Método 1: Inyección mediante prototipo
Vue.prototype.$almacen = store;

// Método 2: Inyección en la instancia Vue
new Vue({
    el: '#app',
    store,
    render: h => h(App)
});

Uso Práctico

Para actualizar el estado desde un componente, se ejecuta una mutación:

this.$almacen.commit('actualizarUsuario', { nombre: 'Ejemplo', id: 123 });

Para acceder al estado, se pueden usar los getters directamente o mediante la función auxiliar mapGetters:

<script>
import { mapGetters } from 'vuex';

export default {
    computed: {
        ...mapGetters({
            perfilUsuario: 'obtenerUsuario'
        }),
        usuarioActual() {
            return this.$almacen.getters.obtenerUsuario();
        }
    }
};
</script>

Uso de Obtainedores vs. Estado Directo

Una pregunta frecuente es por qué utilizar obtenedores en lugar de acceder directamente al estado. Los obtenedores actúan como propiedades computadas para el almacén: permiten transformar, filtrar o combinar datos del estado de manera reutilizable. Por ejemplo, si múltiples componentes necesitan mostrar una fecha formateada o calcular un valor derivado de varios campos del estado, un obtenedor encapsula esa lógica para evitar duplicación.

En resumen: el estado centraliza los datos sin procesar, mientras que los obtenedores proporcionan vistas derivadas y optimizadas de esos datos, similar al papel de computed en los componentes Vue.

Etiquetas: vue.js vuex JavaScript gestión de estado frontend

Publicado el 6-13 00:42