vuex namespaced mapState with multiple modules

坚强是说给别人听的谎言 提交于 2019-12-18 15:58:05

问题


I must be missing something. How can I use vuex mapState with multiple modules?

As far as understand, besides passing an object as argument, namespaced mapState can take two arguments: namespace and an array of object names denoting the members of modules. Like this

// an imcomplete vue
export default {
   computed: mapState('user', ['addresses', 'creditCards']) 
};

But what if i'd like to add objects from a second namespace to computed? e.g. vendor like this:

mapState('vendor', ['products', 'ratings']) 

Currently I am merging both mapState like this:

let userMapState = mapState('user', ['addresses', 'creditCards']); 
let vendorMapState = mapState ('vendor', ['products', 'ratings']);
let mergedMapStates = Object.assign({}, userMapState, vendorMapState);

And then:

// an imcomplete vue
export default {
    computed: mergedMapStates
};

It works, but it's hardly the right way to do it. Or is it?


回答1:


Use the spread operator:

computed: {
  ...mapState('user', ['addresses', 'creditCards']),
  ...mapState('vendor', ['products', 'ratings']) 
}



回答2:


This is from the vuex docs, you can do it all within one ...mapState({}). Documentation

computed: {
  ...mapState({
    a: state => state.some.nested.module.a,
    b: state => state.some.nested.module.b
  })
},

Edit 2019

You can also pass a path to your nested module and make the module references cleaner (thanks @gijswijs)

computed: {
  ...mapState('some/nested/module', {
    a: state => state.a,
    b: state => state.b
  })
},


来源:https://stackoverflow.com/questions/45594244/vuex-namespaced-mapstate-with-multiple-modules

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!