vuex中mutations與actions的使用及區別


之前寫過簡單的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
    }
  }
  
簡單說到這里,先會用在研究原理



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





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM