了解です!
では続けて 第3章 3.1 クラスでのVuex利用(mapState / mapMutationsなど) に入ります。
ここでは、クラスコンポーネントでの Vuex の使い方 を確認します。
「どう使っていたか」を整理することで、次の useStore()
への書き換えが理解しやすくなります。
<template>
<!-- 子コンポーネントにVuexのstateを渡す -->
<ChildComponent :count="count" @increment="incrementCount" />
</template>
<script lang="ts">
// Vue, Component, mapState, mapMutations をインポート
import Vue from 'vue';
import Component from 'vue-class-component';
import { mapState, mapMutations } from 'vuex';
// 子コンポーネントをインポート
import ChildComponent from './ChildComponent.vue';
@Component({
components: {
ChildComponent,
},
// computedでVuexのstateをマッピング
computed: {
...mapState(['count']),
},
// methodsでVuexのmutationsをマッピング
methods: {
...mapMutations(['increment']),
},
})
// 親コンポーネントのクラス定義
export default class ParentComponent extends Vue {
// 子からemitされたときにVuexのincrementを呼び出す
incrementCount() {
this.increment();
}
// mapMutationsで追加されるincrementの型宣言
increment!: () => void;
// mapStateで追加されるcountの型宣言
get count(): number {
return 0; // これはダミー、実際はmapStateで上書きされる
}
}
</script>
機能 | 使い方 |
---|---|
stateの取得 | mapState(['count']) → this.count |
mutationの呼び出し | mapMutations(['increment']) → this.increment() |
computed / methods の中で Vuex をマッピング | オブジェクト展開 (... ) でまとめて定義 |
this.count
は Vuex の statethis.increment()
は mutation 呼び出しmapState
/ mapMutations
を使うと this
が必須this
まわりで型エラーが出やすいthis
が消える → 型がすっきりする