vuex namespaced mapState with multiple modules

LongHike picture LongHike · Aug 9, 2017 · Viewed 19.5k times · Source

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?

Answer

thanksd picture thanksd · Aug 9, 2017

Use the spread operator:

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