以前寫的vuex store裏放一個state 這樣隨着項目愈來愈大,state也會愈來愈大 。vue
並且考慮多人開發多人維護一個state 也會比較難維護 估計多人開發的必定會分模塊管理state 在redux裏提供了 combineReducers 能夠拆分reducer到組件vuex
翻了下vuex文檔 發現提供了modules 估計能夠按照這個進行拆分 也不是拆分 實際是提供了命名空間 試驗了下redux
新建了個shop的模塊 this
state.jsspa
export default { vshop:'123' }
getters.jscode
export default { ashop:state=>state.vshop+'哈哈' }
actions.jsblog
export default { shopAction(ctx,item){ ctx.commit('shopMutation',item); } }
mutations.js開發
export default { shopMutation(state,item){ state.vshop=item; } }
index.js文檔
import state from './state' import getters from './getters' import mutations from './mutations' import actions from './actions' export default { namespaced: true, state, getters, mutations, actions }
在store/index.js 引入剛纔新建的shop模塊get
import Vue from 'vue' import Vuex from 'vuex' import state from './state.js' import actions from './actions.js' import mutations from './mutations.js' import shop from './shop' Vue.use(Vuex) export default new Vuex.Store({ state, actions, mutations, modules:{ shop } })
在我demo的組件Dataming.vue
computed:{ ...mapState('shop',{ vshop:'vshop' }) }
在methods
methods:{ changeshop(){ this.shopAction(99099); }, ...mapActions('shop',{ shopAction:"shopAction" }), ...mapMutations('shop',{ shopMutation:'shopMutation' }) }
在模板文件裏放了個
<div>
{{vshop}}<button @click="changeshop">changeshop</button>
</div>
這樣基本完成了一個小的vuex分模塊demo
補充
期中getters.js 相似vue計算屬性
computed:{ ...mapState('shop',{ vshop:'vshop' }), ...mapGetters('shop',{ ashop:'ashop' }) }
在模板中 {{ashop}}