溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mutitons和actions怎么在Vuex中使用

發布時間:2021-05-17 18:02:19 來源:億速云 閱讀:157 作者:Leah 欄目:web開發

mutitons和actions怎么在Vuex中使用?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

Mutations

mutations 必須是同步函數,為什么?

舉個例子:  官方案例

mutations: {
 someMutation (state) {
  api.callAsyncMethod(() => {
   state.count++
  })
 }
}

我們都知道任何回調函數中進行的狀態改變都是無法追蹤的,  devtools會對mutations的每一條提交做記錄,記錄上一次提交之前和提交之后的狀態,在上面的例子中無法實現捕捉狀態,因為在執行mutations時,內部回調函數還沒有執行,

所以此時無法捕捉狀態.

再簡單來講,就像大家都吃過核桃,核桃剛產下來的時候是帶一層綠色的皮的,我們需要將綠色燒掉,弄掉了,才是我們在市場上見到的只有外面硬殼的核桃,如果我們只剝去綠皮,是不能直接吃的,因為還有一層殼胡著呢.

Actions

vuex肯定不甘示弱,為了解決mutations只有同步的問題,提出了actions(異步),專門用來解決mutations只有同步無異步的問題.

1. 首先先了解一下actions

(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
    }
  }

Vuex 狀態管理

Vuex 依賴于 Vue 用來管理 Vue 項目狀態

狀態的修改依賴于 commit 和 dispatch

import Vue from 'Vue';
import Vuex from 'Vuex';

export default new Vuex.Store({
  state:{
    count:100
  },
  mutations:{
    change(state,payload){
      state.count += payload;
    }
  },
  actions:{
    change(context,palyload){
      context.commit('change',palyload);// 異步觸發 mutaiton
    }
  },
  getters:{
    getCount(){
      return state.count;
    }
  }
})
{{$store.state.count}}
<button @click="commitChange">更改count</button>
<button @click="dispatchChange">更改count</button>

...

methods:{
  commitChange(){
    this.$store.commit('change',1);
  },
  dispatchChange(){
    this.$sotre.dispatch('change',10);
  }
}

關于mutitons和actions怎么在Vuex中使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女