const store = useStore()
で型付きアクセスthis
がない → this.$store
も使えないuseStore()
を使って storeインスタンスを取り出すStore<RootState>
型を渡してある useStore
を使えば state / getters / mutations / actions に型が効く家に冷蔵庫はひとつ(store)だけど、
使いたい人が「自分用に必要なものだけ持ってくる」のが
useStore()
。→ 中に何があるか(型)もわかっている。
useStore
の準備(おさらい)store/useStore.ts
// vuexのuseStore関数と型をインポート
import { useStore as baseUseStore } from 'vuex';
import { Store } from 'vuex';
import { RootState } from './types';
// 型付きのuseStoreを作成
export const useStore = (): Store<RootState> => {
return baseUseStore<RootState>();
};
<template>
<div>
<p>Count: {{ count }}</p>
<p>User Info: {{ userInfo }}</p>
<button @click="increment">+1</button>
<button @click="changeUserName">Change Name</button>
</div>
</template>
<script lang="ts" setup>
// 型付きuseStoreをインポート
import { useStore } from '@/store/useStore';
const store = useStore(); // 型付きなので補完が効く!
// stateにアクセス(countはnumber型で補完OK)
const count = store.state.count;
// gettersも補完OK
const userInfo = store.getters.userInfo;
// mutationを呼ぶ('increment'は型で補完される)
const increment = () => {
store.commit('increment');
};
// actionも安全に呼べる(引数も型チェックされる)
const changeUserName = () => {
store.dispatch('updateUserName', 'Hanako');
};
</script>