Vuex Modules模块化的基本操作

下面是Vuex的目录结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210426112457203.pn
Vuex的state类似就是存储数据的地方,如果项目数据结构复杂,vuex的数据全都写在同一个state中难以维护。所以模块化开发将其按照一个一个的模块划分,每个模块都有自己的state,mutations,actions 在export default暴露出去导入到store/index.js统一再暴露出去

//import导入文件部分省略
Vue.use(Vuex)
const store = new Vuex.Store({
  modules: {
    app,
    settings,
    user,
    car
  },
  getters
})

export default store

car.js文件

const state = {
  carName: '马自达',
  productionAddress: '河南'   //未导入到getters中
}

const mutations = {
  SET_CARNAME(state, data) {
    state.carName = data;
  },
  SET_PRODUCTIONADDRESS(state, data) {
    state.productionAddress = data;
  }
}

const actions = {
  change_carName({
    commit
  }, data) {
    commit("SET_CARNAME", data)
  },
  change_productionAddress({
    commit
  }, data) {
    commit("SET_PRODUCTIONADDRESS", data)
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

getters.js

const getters = {
  sidebar: state => state.app.sidebar,
  device: state => state.app.device,
  token: state => state.user.token,
  avatar: state => state.user.avatar,
  name: state => state.user.name,
  roles: state => state.user.roles,
  carName: state => state.car.carName  //导入到getters中
}
export default getters

同理,可以根据自己项目的实际需求去模块化划分生成不同模块的.js文件
下面是具体的使用方法

1.常规 非模块下vuex使用

this.$stroe.state.carName
this.$store.commit('SET_CARNAME','宝马')
this.$store.dispatch('change_carName','奥迪')
//辅助函数
import {mapState, mapMutations, mapActions, mapGetters} from "vuex"
computed:{
	...mapState({
		count:state=>state.count   //键自定义名称
	}),
	...mapGetters({
		changeState:'changeState' //键可自定义名字
	})
}
methods:{
	...mapMutations({
		muCountAdd:'muCountAdd'
	}),
	...mapActions({
		acCountAdd:'acCountAdd'
	})
}

state和getters因为要响应式,需要在页面的computed中使用辅助函数。
mutations和actions需要在methods中去使用辅助函数

2.模块下的vuex使用

this.$store.state.car.carName  //获取car模块的state中carName值
this.$store.commit('car/SET_CARNAME','宝马')   //调用mutation的SET_CARNAME
this.$store.dispatch('car/change_carName','奥迪')  //调用actions的change_carName

//或者mapGetters辅助函数
import { mapGetters,mapState } from 'vuex'
computed: {
    ...mapGetters(['carName']),  //直接拿到getters中的carName,在页面中可以直接使用
    ...mapState({ productionAddress: (state) => state.car.productionAddress }),
  },

main.js入口文件

import store from './store'
//Vue.use(Vuex) 这一步在store.js中已经导入了
new Vue({
  el: '#app',
  router,
  store,   //ES6键值相同的简写 
  render: h => h(App)
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值