J'ai dû louper quelque chose. Comment puis-je utiliser vuex mapState avec plusieurs modules?
Pour autant que nous le comprenions, en plus de passer un objet en argument, mapState avec espace de noms peut prendre deux arguments: un espace de noms et un tableau de noms d'objets désignant les membres des modules. Comme ça
// an imcomplete vue
export default {
computed: mapState('user', ['addresses', 'creditCards'])
};
Mais que se passe-t-il si je souhaite ajouter des objets d'un deuxième espace de noms au calcul? par exemple. fournisseur comme celui-ci:
mapState('vendor', ['products', 'ratings'])
Actuellement, je fusionne les deux mapState comme ceci:
let userMapState = mapState('user', ['addresses', 'creditCards']);
let vendorMapState = mapState ('vendor', ['products', 'ratings']);
let mergedMapStates = Object.assign({}, userMapState, vendorMapState);
Puis:
// an imcomplete vue
export default {
computed: mergedMapStates
};
Cela fonctionne, mais ce n'est pas la bonne façon de le faire. Ou est-ce?
Utilisez opérateur d'étalement :
computed: {
...mapState('user', ['addresses', 'creditCards']),
...mapState('vendor', ['products', 'ratings'])
}
C'est à partir des documents vuex, vous pouvez tout faire dans une ...mapState({})
. Documentation
computed: {
...mapState({
a: state => state.some.nested.module.a,
b: state => state.some.nested.module.b
})
},
Modifier 2019
Vous pouvez également passer un chemin vers votre module imbriqué et rendre les références de module plus propres (merci @ gijswijs )
computed: {
...mapState('some/nested/module', {
a: state => state.a,
b: state => state.b
})
},
Vous pouvez également utiliser Object.assign comme ceci. Similaire à votre solution actuelle mais un peu plus propre.
computed: Object.assign(
mapState('user', ['addresses', 'creditCards']),
mapState('vendor', ['products', 'ratings']
)