what is Vuex ?
這句話我想每個搜尋過Vuex官網文件的人都看到過,
在學習原始碼前,當然要有一些前提條件了。
- 瞭解Vuex的作用,以及他的使用場景。
- 會使用Vuex,對基本API熟練掌握。
- 有一顆求知的內心(balabla的)。
Vuex我們通常稱之為狀態管理模式,用於解決元件間通訊的以及多元件共享狀態等問題。官網文件中註明的場景十分影響框架開發的整體脈絡,也就是這個框架從一開始做就想解決這些問題,
Vuex的核心API有哪些?
(=》 符號代之類比 ->符號代表 在vuex提供的輔助函式)
-
state : 資料倉儲,所有的資料都存在這裡。 =》 vue物件的data。
-
getters :可以搭配倉庫中的資料結合起來聯動相應的資料 =》 vue的計算屬性 -> mapGetters
-
mutation :更新資料倉儲中的資料 -> mapMutations
-
action :負責非同步操作(網路請求、定時器等內容)呼叫mutation來更新資料 -> mapActions
-
modules : 模組模式 提供了名稱空間 使狀態管理支援了樹形結構。(畫重點)
把這些API分成倆大類:
- 負責向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(可以為空),也就是名稱空間字首,以及一個物件、或者陣列。
- mapState 為元件建立計算屬性以返回 Vuex store 中的狀態。
- mapGetters 為元件建立計算屬性以返回 getter 的返回值。
- mapMutations 建立元件方法分發 action。
- mapActions 建立元件方法提交 mutation。
以上幾個方法都是為Vue元件遍歷使用而產生的。
但是還不夠極致,每個都要寫名稱空間, 輔助函式還提供了createNamespacedHelpers。建立指定名稱空間的輔助函式,
總結
Vuex的功能首先分為兩大類:
- Vuex自己的例項使用 getters、mutations、actions
- Vuex為元件中使用便利而提供的輔助函式 mapGetters、mapMutations、mapActions、mapState、createNamespacedHelpers
Vuex自己內部對資料狀態(state)有兩種功能:
- 修改資料狀態 action:非同步 mutation : 同步。
- 獲取資料狀態 getter : 可以經過計算 state : 直接返回資料狀態。
Vuex支援的模式:模組模式 modules,為Vuex提供樹形結構,以及名稱空間,幫助Vuex層級分明。
下一章分析一下脈絡