VUEX 使用学习六 : modules
Posted 香吧香
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VUEX 使用学习六 : modules相关的知识,希望对你有一定的参考价值。
转载请注明出处:
当Store中存放了非常多非常大的共享数据对象时,应用会变的非常的复杂,Store对象也会非常臃肿,所以Vuex提供了一个Module模块来分隔Store。通过对Vuex中的Store分隔,分隔成一个一个的Module模块,每个Module模块都拥有自己的state、mutation、actions和getters。
const moduleA = state: () => ( ... ), mutations: ... , actions: ... , getters: ... const moduleB = state: () => ( ... ), mutations: ... , actions: ... const store = new Vuex.Store( modules: a: moduleA, b: moduleB ) store.state.a // -> moduleA 的状态 store.state.b // -> moduleB 的状态
对于模块中的mutations和getters,传入的第一个参数规定为state,而actions则依旧是context参数。如下:
const moduleA = state: count: 0 , mutations: increment (state) // 这里的 `state` 对象是模块的局部状态 state.count++ , getters: doubleCount (state) return state.count * 2 , actions: // context对象其实包含了 state、commit、rootState。 incrementIfOddRootsum (context) if ((context.state.count + context.rootState.count) % 2 === 1) // 调用mutations commit(\'increment\')
在module中通过mapState、mapGetters、mapActions和mapMutations等辅助函数来绑定要触发的函数
第一种方式
methods: ...mapActions([ \'some/nested/module/foo\', \'some/nested/module/bar\' ])
在vuex中,可以为导入的state、getters、actions以及mutations命名别名,,这样可以方便调用
methods: ...mapActions([ \'foo\': \'some/nested/module/foo\', \'bar\': \'some/nested/module/bar\' ])
第二种方式
对于这种情况,你可以将模块的空间名称字符串作为第一个参数传递给上述函数,这样所有绑定都会自动将该模块作为上下文。于是上面的例子可以简化为:
methods: ...mapActions(\'some/nested/module\', [ \'foo\', // -> this.foo() \'bar\' // -> this.bar() ])
在网上找到一个demo 示例,可参考学习: https://gitee.com/xiangbaxiang/vue-store
以上是关于VUEX 使用学习六 : modules的主要内容,如果未能解决你的问题,请参考以下文章
使用 NuxtJS 和 vuex-module-decorators 的动态 vuex 存储模块
Vuex进阶使用之modules模块化划分mapStatemapActions辅助函数的使用