🗒️
【Nuxt.js v2】storeのstateへのアクセスを簡潔にする(mapState)
mapStateとは
Vuexが提供する機能で、stateへのアクセスをより簡潔に行うことができます。
他にも同様の機能としてmapMutations
やmapAcitons
があります。
使い方
例えば/store/auth.js
にログイン状態を表すauthenticated
というstateを定義しているとします。
mapStateを使わない場合は、this.$store.state.auth.authenticated
と記述することで参照可能です。(template内ではthis.
無し)
同じページ内で何度も記述したり、参照先のstoreモジュールが複数あったりすると、可読性がかなり下がります。
mapStateを使いcomputedに記述することで、変数と同じように参照することができます。
以下の場合、this.authenticated
で、this.$store.state.auth.authenticated
にアクセス出来るようになります。(template内ではauthenticated
)
<script>
import { mapState } from 'vuex'
export default {
computed: mapState({
authenticated: state => state.auth.authenticated
})
}
</script>
参照する対象が複数ある場合
computed: mapState({
authenticated: state => state.auth.authenticated,
name: state => state.user.name
})
computedに他のプロパティも定義する場合
スプレッド構文...
で、mapStateで取得したオブジェクトの中身を展開する必要があります。
computed: {
...mapState({
authenticated: state => state.auth.authenticated,
name: state => state.user.name
}),
hoge: () => 'hoge'
}
Discussion