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中使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。