為什麼要使用 Vuex
在構建大型應用程式(如單頁應用程式(SPA))時,這些應用程式通常由許多可重用的元件組成,因此很快就會難以構建和維護。這些元件之間的資料和狀態共享也可能很快崩潰,並且難以除錯和維護。
通過使用集中式應用程式資料儲存,可以在一個地方表示整個應用程式狀態,從而使應用程式更有條理。通過使用單向資料流,突變和通過限定元件資料訪問所需的資料,可以更容易地推斷元件角色以及它應如何影響應用程式狀態。
VueJS 元件是獨立的實體,它們不能輕易地在彼此之間共享資料。要在沒有 vuex 的情況下共享資料,我們需要將 emit
事件與資料一起使用,然後使用 on
監聽並捕獲該事件。
元件 1
this.$emit('eventWithDataObject', dataObject)
元件 2
this.$on('eventWithDataObject', function (dataObject) {
console.log(dataObject)
})
安裝 vuex 後,我們可以簡單地從任何元件訪問其資料,而無需監聽事件。
this.$store.state.myData
我們還可以與 mutator 同步更改資料,使用非同步操作並使用 getter 函式獲取資料。
Getter 函式可以作為全域性計算函式。我們可以從元件訪問它們:
this.$store.getters.myGetter
行動是全域性方法。我們可以從元件中分發它們:
this.$store.dispatch('myAction', myDataObject)
並且突變是在 vuex 中更改資料的唯一方法。我們可以提交更改:
this.$store.commit('myMutation', myDataObject)
Vuex 程式碼看起來像這樣
state: {
myData: {
key: 'val'
}
},
getters: {
myGetter: state => {
return state.myData.key.length
}
},
actions: {
myAction ({ commit }, myDataObject) {
setTimeout(() => {
commit('myMutation', myDataObject)
}, 2000)
}
},
mutations: {
myMutation (state, myDataObject) {
state.myData = myDataObject
}
}