Vue
【Vue】Vuexのstore.jsの書き方例と、ファイル分割方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
PR
Vue.js の Vuex の store.js の書き方のサンプルと、ファイル分割する方法についてまとめました。
はじめに
Vue.js は、Vue2 と Vue3 で書き方が違うところがあり、この記事では両方とも書いています。
それぞれの環境に合った方を読んでみてください。
store.js の基本的な書き方
Vue3
import { createStore } from "vuex"
export default createStore({
state: {
count: 0,
},
mutations: {
incrementCount(state) {
state.count += 1
},
reduceCount(state) {
state.count -= 1
},
},
actions: {
incrementCount({ commit }) {
commit("incrementCount")
},
},
getters: {},
modules: {
//
},
})
Vue2
export default new Vuex.Store({
//この中の記述は、Vue3と同じです
state: {},
mutations: {},
actions: {},
getters: {},
modules: {},
})
ここまで記述できたら、以下の記述をして導入がうまく行っているか確認しましょう。
<template>
<div>{{ $store.state.count }}</div>
</template>
Vuex のファイルを分割する方法
基本的に、分割した先のファイルに処理を書く。
store.js にインポートし、modules に追加するという流れとなります。
store/like.js
を作成
like.js ファイルを作成しました。
分割ファイルに記述
store/like.js
に記述
const getters = {}
const state = {
count: 0,
}
const mutations = {
incrementCount(state) {
state.count += 1
},
}
const actions = {
incrementCount({ commit }) {
commit("incrementCount")
},
}
export default {
namespaced: true,
getters,
state,
mutations,
actions,
}
store.js の modules に追加する
Vue 3
import like from "./store/like"
export default createStore({
modules: {
like,
},
})
Vue 2
import like from "./store/like"
export default new Vuex.Store({
modules: {
like,
},
})
表示してみて確認
index.vue など
<template>
<div>
{{ $store.state.like.count }}
</div>
</template>
これで表示できれば分割が完了しました。
分割ファイルの処理を呼び出す方法
actions
Vue 3
<script setup>
import { useStore } from "vuex"
const store = useStore()
const handleEvent = () => {
store.dispatch("like/incrementCount")
}
</script>
Vue 2
<script>
export default {
methods: {
...mapActions("like", ["incrementCount"]), //incrementCountという関数名でこのコンポーネント内で使用可能になる
},
}
</script>
state
Vue3 Vue2 共通で.
で繋げば大丈夫です。
<template>
<div>
{{ $store.state.like.count }}
</div>
</template>
getters
Vue 3
<template>
<div>{{ tripleCount }}</div>
</template>
<script setup>
import { useStore } from "vuex"
import { computed } from "vue"
const store = useStore()
const tripleCount = computed(() => store.getters["like/tripleCount"]) //like.jsのgettersにtripleCountという関数を書いた前提
</script>
Vue 2
<template>
<div>{{ tripleCount }}</div>
</template>
<script>
import { mapActions, mapGetters } from "vuex"
export default {
computed: {
...mapGetters("like", ["tripleCount"]), //like.jsのgettersにtripleCountという関数を書いた前提
},
}
</script>
まとめ
以上、Vue.js の Vuex の store.js の書き方のサンプルと、ファイル分割する方法についてまとめました。
Vue 3 は CompositionAPI を使っているので、記述がだいぶ Vue 2 の頃と変わっていま す。
誰かの参考になれば幸いです。
フィードバックのお願い
この記事のフィードバックがありましたらYoutubeの適当な動画にコメントしていただいたり、お問い合わせからご連絡ください。