本次接受一個BI系統,要求是可以接入數據源-獲得數據集-對數據集進行處理-展示爲數據的可視化,這一個系統爲了接入公司自身的產品,後端技術採用spring boot,前端採用vue+vuex+axios的項目架構方式,vuex做爲vue的狀態管理,是尤其重要的部分。這裏,我將vuex如何運做和使用作一次總結,有錯的地方,望多多提點。前端
cnpm install vuex --savevue
如圖所示:ios
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: { token: 0 }, }) export default store;
import Vue from 'vue' import App from './App.vue' import store from './store/index' Vue.config.productionTip = false new Vue({ render: h => h(App) , store }).$mount('#app')
在vue的組件中,想要得到vuex裏的全局數據,能夠把vue看作一個類,在其下面有許多屬性,其中有咱們剛剛注入的vuex,如圖spring
咱們能夠看到vue他自己就是一個json,在其下有$store這個對象,而$store下又有state,state下得就是咱們存儲在vue中的全局數據,
在組件中經過this.$store.state.token便可得到咱們的數據。vuex
getters:{ getToken(state){ return state.token; }
import {mapGetters,mapActions} from 'vuex' export default { name: 'app', components: { HelloWorld }, computed:{ ...mapGetters(["getToken"]) }, mounted() { console.log(this.getToken) console.log(this.$store.getters.getToken) }, }
映射出來的getters仍然掛載在vue上,如圖所示npm
mutations:{ setToken(state,n){ state.token=state.token+n; } }, actions:{ setToken({commit},n){ commit('setToken',n) } }
import {mapGetters,mapActions} from 'vuex' export default { name: 'app', components: { HelloWorld }, computed:{ ...mapGetters(["getToken"]) }, mounted() { console.log(this) console.log(this.setToken(1)) console.log(this.getToken) },methods:{ ...mapActions(["setToken"]) },
在vue的json中,一樣能夠找到相同的屬性。json
須要注意的是若是在模塊內部加入了namesapced:true這一個屬性。在取值的時候須要作一點細微的變更,經過mapGetters火mapActions映射時須要將模塊名做爲路勁,來得到該模塊的getters,和actions,模塊化代碼以下axios
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const moduleA = { namespaced:true, state: { a:1 }, mutations: { }, actions: { }, getters: { geta(state){ return state.a; } } } const moduleB = { namespaced:true, state: { b:1}, mutations: { }, actions: {} } const store = new Vuex.Store({ state: { token: 0 }, getters:{ getToken(state){ return state.token; }, } , mutations:{ setToken(state,n){ state.token=state.token+n; } }, actions:{ setToken({commit},n){ commit('setToken',n) } }, modules: { a: moduleA, b: moduleB }, }) export default store;
computed:{ // ...mapGetters(["getToken"]) ...mapGetters("a",["geta"]) }, mounted() { console.log(this) console.log(this.geta)
這是我對vuex的基本用法和基本理解方式,vuex固然不可能侷限於此,此處只列舉了最簡單的,作個總結的同時也等同於記下,聽說vue3塊出了,是用ts重寫的vue,到時再去看看,vue3又有了哪些變化,和哪些可取之處。本文所寫,有不對的地方,你們多多提出來。共同進步。後端