本次接受一个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又有了哪些变化,和哪些可取之处。本文所写,有不对的地方,你们多多提出来。共同进步。后端