Vuex原始碼學習(一)功能梳理

酸楚與甘甜發表於2019-03-21

what is Vuex ?

這句話我想每個搜尋過Vuex官網文件的人都看到過,

在學習原始碼前,當然要有一些前提條件了。

  1. 瞭解Vuex的作用,以及他的使用場景。
  2. 會使用Vuex,對基本API熟練掌握。
  3. 有一顆求知的內心(balabla的)。

Vuex我們通常稱之為狀態管理模式,用於解決元件間通訊的以及多元件共享狀態等問題。官網文件中註明的場景十分影響框架開發的整體脈絡,也就是這個框架從一開始做就想解決這些問題,

Vuex的核心API有哪些?

(=》 符號代之類比 ->符號代表 在vuex提供的輔助函式)

  1. state : 資料倉儲,所有的資料都存在這裡。 =》 vue物件的data。

  2. getters :可以搭配倉庫中的資料結合起來聯動相應的資料 =》 vue的計算屬性 -> mapGetters

  3. mutation :更新資料倉儲中的資料 -> mapMutations

  4. action :負責非同步操作(網路請求、定時器等內容)呼叫mutation來更新資料 -> mapActions

  5. modules : 模組模式 提供了名稱空間 使狀態管理支援了樹形結構。(畫重點

把這些API分成倆大類:

  1. 負責向Vuex中輸入。
  2. 從Vuex中獲取資料使用。
    Vuex原始碼學習(一)功能梳理

action 與 mutation 解決了所有向Vuex更新資料的方式(同步與非同步)。

getters 與 state 解決了vue元件(也可以是vuex內部)從Vuex獲取資料。

modules呢 當然不屬於這兩大類,它是一個基石,他讓Vuex有了樹形結構, 你可以將Vuex組織成一個模組,每個模組都有action、mutation、getters、state等方法。模組之間有了父子關係。

以上這些都是針對於Vuex內部的一些方法,可以在Vuex的例項上使用。 Vuex的例項一般都會掛載到Vue物件上。

輔助函式

為了方便使用Vuex還提供了一組輔助函式

在使用Vue進行開發的時候,我們有大量的states、getters、mutations、actions要使用,每個都使用vuex例項去呼叫會浪費很多程式碼,尤其是在使用了名稱空間(namespaced)之後,vuex例項去呼叫這些方法都要加上對應的名稱空間,所以就有了以下四個方法,接收一個namespace(可以為空),也就是名稱空間字首,以及一個物件、或者陣列。

  1. mapState 為元件建立計算屬性以返回 Vuex store 中的狀態。
  2. mapGetters 為元件建立計算屬性以返回 getter 的返回值。
  3. mapMutations 建立元件方法分發 action。
  4. mapActions 建立元件方法提交 mutation。

以上幾個方法都是為Vue元件遍歷使用而產生的。

但是還不夠極致,每個都要寫名稱空間, 輔助函式還提供了createNamespacedHelpers。建立指定名稱空間的輔助函式,

總結

Vuex的功能首先分為兩大類:

  1. Vuex自己的例項使用 getters、mutations、actions
  2. Vuex為元件中使用便利而提供的輔助函式 mapGetters、mapMutations、mapActions、mapState、createNamespacedHelpers

Vuex自己內部對資料狀態(state)有兩種功能:

  1. 修改資料狀態 action:非同步 mutation : 同步。
  2. 獲取資料狀態 getter : 可以經過計算 state : 直接返回資料狀態。

Vuex支援的模式:模組模式 modules,為Vuex提供樹形結構,以及名稱空間,幫助Vuex層級分明。

下一章分析一下脈絡

我是一個應屆生,最近和朋友們維護了一個公眾號,內容是我們在從應屆生過渡到開發這一路所踩過的坑,已經我們一步步學習的記錄,如果感興趣的朋友可以關注一下,一同加油~

個人公眾號:鹹魚正翻身

相關文章