【3章 続き】this.$store を直接使う場合との違い (vuex-class との比較)


🎯 要点まとめ


🥕 たとえ:ラベルを貼ってある vs 毎回探す

冷蔵庫から卵を取りたいとき、

「毎回卵を探す(this.$store.state.egg)」のはめんどくさい。

「これが卵です!(@State('egg') public myEgg!: Egg;)」って

ラベル貼っておけばすぐ取り出せる。

→ 書き間違いも減る。


📦 具体的な違い

🚫 直接 this.$store を使うパターン

this.$store.state.count;                       // 変数名間違うと気づきにくい
this.$store.getters.userInfo;                  // 毎回"getters."って書く必要がある
this.$store.commit('increment');               // mutation名も手で書く
this.$store.dispatch('updateUserName', 'Hanako'); // action名も手で書く

デメリット 理由
毎回 this.$store. と書く必要 冗長・長い
名前を間違えても気づきにくい 文字列で直接指定するから
引数の型補完が弱い commit や dispatch の第二引数に型が効きにくい

vuex-class デコレータを使うパターン

// countをstateからそのままプロパティで使える
@State('count') public count!: number;

// getterもプロパティとして直接使える
@Getter('userInfo') public userInfo!: string;

// mutationも関数としてそのまま使える
@Mutation('increment') public increment!: () => void;

// actionも関数としてそのまま使える(引数も型チェック)
@Action('updateUserName') public updateUserName!: (name: string) => Promise<void>;

// 呼び出しは超シンプル
this.increment();
this.updateUserName('Hanako');

メリット 理由
書く量が短い this.$store いらない
名前間違いにすぐ気づける 型と補完が効く
引数の型チェックが効く mutation/actionのpayload型が反映される