正常写vuex的index的时候如果数据太多很麻烦,如有的模块是管理用户信息或修改课程等这两个是不同一个种类的,如果代码太多会造成混乱,这时候可以使用模块化管理
原始写法
如果功能模块太多很乱
import Vue from 'vue'
import Vuex from 'vuex'
//导入Vuex
Vue.use(Vuex)
const actions = {
addSum(context, value) {
//context 上下文里面有commit函数 value 是组件传过来的值
context.commit('AddSum', value)
//获取到了数据 操作数据
},
//获取数据 如发起请求等
}
const mutations = {
AddSum(state, value) {
state.sum += value
//这样就完成了赋值
}
//操作数据
}
const state = { sum: 0 }
//保存数据
//暴露出去给别人使用
export default new Vuex.Store({
actions, mutations, state
})
模块化写法
如果代码逻辑特别多可以分文件细化
import Vue from "vue";
import Vuex from 'vuex'
Vue.use(Vuex)
//用户信息模块
const userList =
{
namespaced: true,//开启命名空间 true开启才可以怎样获取数据 ...mapState('classList',['方法名','方法名'])
actions: {}, //获取数据 如发起请求等
mutations:
{
getUserId(state, value) {
state.user_id = value
} //获取用户ID
}, //操作数据
state: { user_id: '' },// //保存数据
getters: {}//计算
}
//班级模块
const classList =
{
namespaced: true,//开启命名空间 true开启才可以怎样获取数据 ...mapState('classList',['方法名','方法名'])
actions: {}, //获取数据 如发起请求等
mutations: {}, //操作数据
state: { class_id: '' },// //保存数据
getters: {}//计算
}
export default new Vuex.Store({
modules: { userMsg: userList, classMsg: classList }
//获取userList需要从userMsg获取
})
import { mapState,mapMutations,mapActions } from 'vuex';
写入数据
<button @click="getUserId('dpc520')">加</button>
<!--使用map必须使用这种方法传值-->
...mapMutations('userMsg',['getUserId'])
读取数据
<h1>{{ user_id }}</h1>
computed: {
...mapState('userMsg', ['user_id'])
//第一个参数表示从vuex里的userMsg对象获取state的user_id值
}
模块化原始方法 commit getters
commit
模块化使用原始方法赋值需要这样写
<button @click="test()">原始赋值</button>
区别终于 / 号
test() {
this.$store.commit('userMsg/getUserId', '123')
}
getters
this.$store.getters['xxx/xxx']