はじめまして、PMをやっているtatsukenと申します。はじめまして
研修の一環でvue.js、expressを書くことがあったので、そのことを中心にまとめていきたいと思います。
はじめに
Vuexを始めたばかりの自分はVuexに関連する処理をすべてstore.js
などの一つのファイルに記述してしまっており、ファイルが非常にファットになってしまっおり、可読性も非常に下がってしまっていました。
そこでVuexファイルを細かくモジュール分していきたいとおもいます。
必要な環境
- Vue
- Vuex
実装
まずstore/
以下に任意のjsファイルを作成してください。今回はuser.js
というファイルを作成しています。
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state = {
//stateデータ
user: null
}
const mutations = {
//同じ処理を行うならnewMsgはobjectに
setUserInfo(state, userInfo) {
//任意の同期処理
state.user = userInfo
}
}
const actions = {
getUser() {
//任意の非同期処理
}
}
export default {
namespaced: true,
state,
actions,
mutations,
}
このようにstate
,mutations
,actions
それぞれを定数に入れてそれをexport
しています。
それぞれのモジュールを集約しよう
store
ディレクトリと同じ階層に任意のjsファイルを作成してください。今回はstore/index.js
を作成します。
import Vue from 'vue'
import Vuex from 'vuex'
import user from './user'
Vue.use(Vuex)
export default new Vuex.Store({
modules: {
user: user
},
})
ここではまずstore/
以下の作成したVuexファイルをimport user from './store/user'
でインポートします。
そしてモジュールを集約してexport
しています。
main.jsで呼び出し
import Vue from 'vue'
import store from './store/index'
new Vue({
render: h => h(App),
store
}).$mount('#app')
mian.js
内でstore/index
をインポートし、Vueインスタンス
内にインポートしたものを読み込んでください。
Vuexを呼び出す際の注意点
<script>
export default {
created() {
this.$store.dispatch("user/getUser");
this.$store.commit("user/setUserInfo", "hoge");
this.$store.state.user.user;
}
};
</script>
このように呼び出し先の指定がindex.js
での定義から、"user/getUser"
、"user/setUserInfo"
、state.user.user
のようになっていることに注意です。
最後に
このようにVuexのファイルを細かくモジュール分けすることができました。
ファイルを細かくモジュール分けすると可読性が上がり、開発効率が上がると思います。
機会があればぜひ試してみてください。
なにか間違いなどあれば指摘していただけると幸いです。