Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

Aquí podemos ver el ciclo de cómo se ejecuta:

...

En nuestro proyecto, definiremos Vuex enen src/store/index.js:

Bloque de código
languagejs
import Vue from 'vue'
import Vuex from 'vuex'
 
import moduloTexto from './modules/moduloTexto'
import moduloCuenta from './modules/moduloCuenta'
import createPersistedState from 'vuex-persistedstate'
 
Vue.use(Vuex)
 
export default new Vuex.Store({
  state: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
    // Dividimos el estado en diferentes módulos que hagan referencia a diferentes ámbitos
    // Podríamos tener un módulo dedicado, por ejemplo, al login
    moduloTexto, moduloCuenta
  },
  // Para hacer que el estado persista tras refrescar la página
  plugins: [createPersistedState()]
})

...

Para el estado y los getters disponemos respectivamente demapStateymapGettersde mapState mapGetters. Estos nos permiten mapearlos a propiedades computed:

Bloque de código
languagejs
import { mapGetters } from "vuex";
import { mapState } from "vuex";
 
export default {
    computed: {
        ...mapState("modulo", ["variableState", "otroState"]),
        ...mapGetters("modulo", ["isTal", "isCual"])
    }    
}

...

Bloque de código
languagejs
import { mapGetters } from "vuex";
import { mapState } from "vuex";
 
export default {
    computed: {
        ...mapState(["variableState", "otroState"]),
        ...mapGetters(["isTal", "isCual"])
    }    
}

Hay otra forma de referenciar al store y poder acceder tanto al estado como a los getters (también a las acciones como vemos en el siguiente apartado), y sería accediendo a this.$store:

Bloque de código
languagejs
this.$store.state["modulo/variable"]
this.$store.getters["modulo/getter"]

Actions

Para ejecutar acciones desde nuestros componentes, no tendremos que importar nada, simplemente usardispatchusar dispatch de esta manera:

Bloque de código
languagejs
this.$store.dispatch("modulo/action", parametro);

Si la acción no corresponde a ningún módulo, sólo tenemos que llamarla con el nombre de la propia acción. Las acciones son funciones que pueden tener parámetros, y como vemos éstos se le pasan después del nombre de la acción, separados por comas.

Acceder desde archivos JavaScript

El store ya lo tenemos integrado en los componentes, y ya hemos visto la forma de usarlo. Desde un archivo .js lo utilizaríamos igual, pero en vez de referenciarlo con this.$store, tendríamos que importarlo y acceder directamente a store:

Bloque de código
languagejs
import store from "../store"

store.getters["token/isLogged"];
store.dispatch("modulo/action", parametro);