this.$store
を直接使う場合との違い (vuex-class
との比較)this.$store
直接書く → 毎回手書きする、型補完が弱いvuex-class
デコレータを使う → 型補完が効く、宣言的にわかりやすい、コードが短くなる冷蔵庫から卵を取りたいとき、
「毎回卵を探す(
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型が反映される |