私は何かを逃しているに違いない。複数のモジュールでvuex mapStateを使用するにはどうすればよいですか?
理解している限り、オブジェクトを引数として渡す以外に、名前空間付きのmapStateは、名前空間と、モジュールのメンバーを表すオブジェクト名の配列の2つの引数を取ることができます。このような
// an imcomplete vue
export default {
computed: mapState('user', ['addresses', 'creditCards'])
};
しかし、2番目の名前空間から計算にオブジェクトを追加したい場合はどうなりますか?例えばこのようなベンダー:
mapState('vendor', ['products', 'ratings'])
現在、私はこのように両方のmapStateをマージしています:
let userMapState = mapState('user', ['addresses', 'creditCards']);
let vendorMapState = mapState ('vendor', ['products', 'ratings']);
let mergedMapStates = Object.assign({}, userMapState, vendorMapState);
その後:
// an imcomplete vue
export default {
computed: mergedMapStates
};
それは機能しますが、それを行うには正しい方法ではありません。またはそれは?
スプレッド演算子 を使用します。
computed: {
...mapState('user', ['addresses', 'creditCards']),
...mapState('vendor', ['products', 'ratings'])
}
これはvuexドキュメントからのもので、1つの...mapState({})
内ですべて実行できます。 ドキュメント
computed: {
...mapState({
a: state => state.some.nested.module.a,
b: state => state.some.nested.module.b
})
},
2019を編集
ネストされたモジュールへのパスを渡し、モジュール参照をよりクリーンにすることもできます( @ gijswijs に感謝)
computed: {
...mapState('some/nested/module', {
a: state => state.a,
b: state => state.b
})
},
このようにObject.assignを使用することもできます。現在のソリューションに似ていますが、少しクリーンです。
computed: Object.assign(
mapState('user', ['addresses', 'creditCards']),
mapState('vendor', ['products', 'ratings']
)