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 存储模块

uni-app 使用vuex(vuex module)

Vuex进阶使用之modules模块化划分mapStatemapActions辅助函数的使用

vue中vuex的使用, vuex使用模块化自动引入modules

Vuex 第6节 module模块组

新手学Python之学习官网教程(六: Modules)