官方解釋
dispatch(type: string, payload?: any, options?: Object): Promise<any>
dispatch(action: Object, options?: Object): Promise<any>
分發(fā) action沧烈。options 里可以有 root: true掺出,它允許在命名空間模塊里分發(fā)根的 action汤锨。返回一個(gè)解析所有被觸發(fā)的 action 處理器的 Promise
理解
this.$store.dispatch 分發(fā) actions-> 調(diào)用 mutations->改變 states
思考
- Q1:為什么不直接分發(fā) mutation
mutation 有必須同步執(zhí)行的限制百框,而 Action 不受約束闲礼,可以在 action 內(nèi)部執(zhí)行異步操作
- Q2:Action 通常是異步的,如何知道 action 什么時(shí)候結(jié)束铐维?如何才能組合多個(gè) action柬泽,處理復(fù)雜的異步流程
store.dispatch 可以處理被觸發(fā)的 action 的處理函數(shù)返回 Promise,并且 store.dispatch 仍舊返回 Promise
- 引用官網(wǎng)舉例:
// 假設(shè) getData() 和 getOtherData() 返回的是 Promise
actions: {
async actionA ({ commit }) {
commit('gotData', await getData())
},
async actionB ({ dispatch, commit }) {
await dispatch('actionA') // 等待 actionA 完成
commit('gotOtherData', await getOtherData())
}
}
一個(gè) store.dispatch 在不同模塊中可以觸發(fā)多個(gè) action 函數(shù)嫁蛇。在這種情況下锨并,只有當(dāng)所有觸發(fā)函數(shù)完成后,返回的 Promise 才會(huì)執(zhí)行
Vuex 中 dispatch()和 commit()的異同
- 相同點(diǎn)
都可以修改 state睬棚,并且也會(huì)觸發(fā)視圖的更新
- 不同點(diǎn)
commit 調(diào)用的是 vuex 中 mutation 里的方法第煮,存在同步限制;而 dispatch 調(diào)用的數(shù) vuex 中 action 里的方法抑党,action 中可以調(diào)用 mutation 中的函數(shù)包警,也可執(zhí)行異步操作
commit:同步操作
// 存儲(chǔ)
this.$store.commit('chgval',name);
// 取值
this.$store.state.chgval;
dispatch:異步操作
// 存儲(chǔ)
this.$store.dispatch('listdata',name);
// 取值
this.$store.getters.listdata;