試想一個電商網站,頁面繁多,資料的部分前台會有購物車、商品、評價、促銷活動,後台部分有訂單、折扣碼、帳務等等等…眾多的資料如果都放在同一支 store
,要不要個一千行?
為了防止這樣的情況,我們可以將我們的資料們依據自己的分類拆分成一個個模組,以便後續的管理維護。
新增模組其實很~~簡單,比如說我想要新增一支專門用來管理次數的模組,以此為範例
store
資料夾新增一支 count.js
,裡面長這樣:export default {
state: {
count: 0
},
mutations: {
ADD_COUNT (state) {
state.count += 1
}
},
actions: {
updateCount (context, status) {
context.commit('ADD_COUNT', status)
}
}
}
我簡單說明以上內容
state
資料裡面存 count
次數mutations
放更新 count
的方法actions
呼叫 mutations
的方法以更新 count
store
綁定store/index.js
一聲對吧!import countModules from './count'
export default new Vuex.Store({
modules: {
countModules
}
})
只要將我們的 count
模組 import
進來,並在 modules
新增即可唷!
<template>
<div id="app">
<div>
<button @click="updateCount">addCount</button><span>{{ count }}</span>
</div>
</div>
</template>
<script>
export default {
name: 'app',
methods: {
updateCount () {
this.$store.dispatch('updateCount')
}
},
computed: {
count () {
return this.$store.state.countModules.count
}
}
}
</script>
我們在 methods
使用到了 count
模組的 action
,使用方式不變,一樣用 dispatch
去呼叫即可。
但在 computed
中為了取得 count
的值,我們不是直接用 this.$store.state.count
,而是變成 this.$store.state.countModulest
,這是為什麼呢?
因為有一個需要特別注意的地方!!!
在模組中,state預設為模組區域變數,而actions/mutations/getters預設為全域變數
所以我們要取得的不是 store.state
資料,而是他旗下模組 countModules
的資料,故而是使用this.$store.state.countModulest
唷!
今天我們創建了我們第一個 vuex
模組,給自己掌聲鼓勵鼓勵!
明天我們在一起研究,關於模組中一些細節運用的方式吧!