之前的Vuex官方文檔筆記沒有寫完,來慢慢補上。
核心觀念 - Action
Action類似mutation是一個事件,它可以處理異步函式(http請求/setTimeout…),但是他不會直接變更資料狀態,而是會提交到mutation,讓mutation進行資料狀態的更改。
使用方式 - 類似Mutation需要先註冊
store/index.js
1 | const store = new Vuex.Store({ |
action中的事件要接收的第一個參數必定為context,這是一個跟store共享方法和屬性的物件,也就是說你也可以透過這個context取得store中的getter或state資料
我們使用context.commit('mutation type(mutation名稱)')
來向mutation提交變更資料狀態的請求。
1 | context.getters |
注意,context並不等同於store本身,這跟Vuex的模組化有關
如何使用Action?
透過store.dispatch(‘action name’)來觸發action。
使用
1 | store.dispatch('action-name') |
輔助函式 - mapActions
在組件中若需要使用多個action,可以使用mapActions
元件
1 | import { mapActions } from 'vuex' |
Action中的異步處理(Ajax)
store.dispatch是可以處理Promise的,它也可以回傳promise物件
store/index.js
1 |
|
在元件中使用
1 | this.$store.dispatch('actionA').then(() =>{ |
由於actionA會回傳一個promise物件,你可以用then將行為都串起來
在另一個action中觸發另一個ajax行為並做後續行為
store/index.js
1 | actions: { |
actionB會觸發actionA,等到actionA內的Promise被resolve,就進行mutation
使用ES7的Async/Await改寫
store/index.js
1 | //getData()和getOtherData()皆會在取得資料後回傳Promise物件 |