之前寫過簡單的vuex應用方法,現在寫一下vuex中的 actions 和 mutations 的區別
Mutations
mutations 必須是同步函數,為什么?
舉個例子: 官方案例
mutations: { someMutation (state) { api.callAsyncMethod(() => { state.count++ }) } }
我們都知道任何回調函數中進行的狀態改變都是無法追蹤的, devtools會對mutations的每一條提交做記錄,記錄上一次提交之前和提交之后的狀態,在上面的例子中無法實現捕捉狀態,因為在執行mutations時,內部回調函數還沒有執行,
所以此時無法捕捉狀態.
再簡單來講,就像大家都吃過核桃,核桃剛產下來的時候是帶一層綠色的皮的,我們需要將綠色燒掉,弄掉了,才是我們在市場上見到的只有外面硬殼的核桃,如果我們只剝去綠皮,是不能直接吃的,因為還有一層殼胡着呢.

Actions
vuex肯定不甘示弱,為了解決mutations只有同步的問題,提出了actions(異步),專門用來解決mutations只有同步無異步的問題.
1. 首先先了解一下actions,第一篇vuex中已經講解了vuex中mutations的用法(https://www.cnblogs.com/0915ty/p/9330439.html),在這里再介紹一下
(1).MUTATIONS
const state = {
xxx: null
},
const mutations = {
[setState](state, value) {
state.xxx = value
}
}
此處value可以是對象,可以是值等
組件調用方式: this.$store.commit('setState', [value])
(2).ACTIONS
// 第一種寫法簡寫形式
const actions = {
[addPlus]({commit}) { // 簡寫方式,待研究
commit('[setState]', value)
//此處value可以是對象,可以是固定值等
}
}
// 第二種形式
const actions = {
[addPlus](context) {
//context 官方給出的指定對象, 此處context可以理解為store對象
context.commit('[setState]', value)
}
}
/* 兩處的commit都是提交的mutations中的字符串的事件類型名稱,對應會調用mutations中的回調函數 */
actions在組件中的調用方式:
import mapActions from 'vuex'
methods: {
...mapActions: ([
'addPlus'
]),
setAddPlus () {
this.$store.dispatch('addPlus', [value]) // 異步調用mutations
}
}
簡單說到這里,先會用在研究原理

再接再厲,繼續努力!!!!!