Vue之Action


(1)同步與異步

    在 mutation 中混合異步調用會導致你的程序很難調試。

    例如,當你調用了兩個包含異步回調的 mutation 來改變狀態,你怎么知道什么時候回調和哪個先回調呢?

    這就是為什么我們要區分這兩個概念。在 Vuex 中,mutation 都是同步事務:

store.commit(event-name)
/* 任何由 "event-name" 導致的狀態變更都應該在此刻完成 */

    為了處理異步操作,vuex出了Action

 

(2)注冊:定義actions動作提交mutation異變函數

    目前為止,我們看到,當點擊后頁面上的值是改變了。我們達到了修改store中狀態值的目的,但是,官方並不推薦我們這樣直接去修改store里面的值,而是去提交一個actions,在actions中提交mutation再去修改狀態值,接下來我們修改index.js文件,先定義actions提交mutation的函數:

    【store/index.js】

    

 

 (3)觸發:分發 Action

    Action 通過 store.dispatch 方法觸發

    把commit提交mutations修改為使用dispatch來提交actions,之后我們再點擊頁面,效果是一樣的。

   

 

(4)優勢---異步執行

    乍一眼看上去感覺多此一舉,我們直接分發 mutation 豈不更方便?實際上並非如此,還記得 mutation 必須同步執行這個限制么?Action 就不受約束!可以在 action 內部執行異步操作。

    【store/index.js】---①異步注冊:定義actions動作提交mutation異變函數

        

   【.vue單文件組件】---②觸發:分發異步Action

        

 

(5)載荷方式和對象方式進行分發

     Actions 支持同樣的載荷方式和對象方式進行分發

     ①載荷形式

        

        

   ②對象形式類似

 

(6)組合 Action----promise

     Action 通常是異步的,那么如何知道 action 什么時候結束呢?更重要的是,我們如何才能組合多個 action,以處理更加復雜的異步流程?

首先需要明白 store.dispatch 可以處理被觸發的 action 的處理函數返回的 Promise,並且 store.dispatch 仍舊返回 Promise.如果利用 async / await,也可以實現其他組合 action

     一個 store.dispatch 在不同模塊中可以觸發多個 action 函數。在這種情況下,只有當所有觸發函數完成后,返回的 Promise 才會執行。

    這個之后章節再做介紹。

 

 

 

 

 

.


免責聲明!

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



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