export default {
nameAsyn({commit}, {age, name}) {
commit(types.SET_NAME, name);
commit(types.SET_AGE, age);
}
}
modules–m1.js示例
如果不是很复杂的应用,一般来讲是不会分模块的
export default {
state: {},
getters: {},
mutations: {},
actions: {}
}
index.js示例(组装vuex)
import vue from 'vue';
import vuex from 'vuex';
import state from './state.js';
import * as getters from './getters.js';
import mutations from './mutations.js';
import actions from './actions.js';
import m1 from './modules/m1.js';
import m2 from './modules/m2.js';
import createLogger from 'vuex/dist/logger'; // 修改日志vue.use(vuex);
const debug = process.env.NODE_ENV !== 'production'; // 开发环境中为true,否则为false
export default new vuex.Store({
state,
getters,
mutations,
actions,
modules: {
m1,
m2
},
plugins: debug ? [createLogger()] : [] // 开发环境下显示vuex的状态修改
});
最后将 store 实例挂载到 main.js 里面的 vue 上去就行了
import store from './store/index.js';new Vue({
el: '#app',
store,
render: h => h(App)
});
在 vue 组件中使用时,我们通常会使用 mapGetters 、 mapActions 、 mapMutations ,然后就可以按照 vue 调用 methods 和 computed 的方式去调用这些变量或函数,示例如
import {mapGetters, mapMutations, mapActions} from 'vuex';/* 只写组件中的script部分 */
export default {
computed: {
...mapGetters([
name,
age
])
},
methods: {
...mapMutations({
setName: 'SET_NAME',
setAge: 'SET_AGE'
}),
...mapActions([
nameAsyn
])
}
};
二、modules
在 src 目录下 , 新建一个 store 文件夹 , 然后在里面新建一个 index.js
import Vue from 'vue'
import vuex from 'vuex'
Vue.use(vuex);export default new vuex.Store({
state:{
show:false
}
})
在 main.js 里的代码应该改成,在实例化 Vue 对象时加入 store 对象
//vuex
import store from './store'new Vue({
el: '#app',
router,
store,//使用store
template: '<App/>',
components: { App }
})
这样就把 store 分离出去了 , 那么还有一个问题是 : 这里 $store.state.show 无论哪个组件都可以使用 , 那组件多了之后 , 状态也多了 , 这么多状态都堆在 store 文件夹下的 index.js 不好维护怎么办 ?










