Vuex 是一個專爲 Vue.js 應用程序開發的狀態管理模式。它採用集中式存儲管理應用的所有組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化
Vuex主要有兩個作用:(1)全局數據存儲和狀態管理,Vuex 的狀態存儲是響應式的。當 Vue 組件從 store 中讀取狀態的時候,若 store 中的狀態發生變化,那麼相應的組件也會相應地得到高效更新。通過vuex可以實現全局狀態的實時更新,例如在父組件home.vue中顯示username,當我們在子組件中改變了username,通過vuex我們就可以實現實時更新而不需要手動刷新。(2)組件之間的通信,利用vuex可以方便地實現父組件與子組件、子組件之間的通信。
Vuex有五個主要概念
一、State
單一狀態樹。簡單來說就是一份狀態數據。基本結構:
在組件中獲取狀態數據的方式是
二、Getter
可以認爲是store的計算屬性,就像計算屬性一樣,getter 的返回值會根據它的依賴被緩存起來,且只有當它的依賴值發生了改變纔會被重新計算。
三、Mutation
更改 Vuex 的 store 中的狀態的唯一方法是提交 mutation。
state中:
mutation中:
在組件中改變socketId時:
mutation都是同步事務,必須是同步函數
四、Action
上面說到mutation只能處理同步函數(其實可以處理異步,但是不建議使用,會造成混亂),action就是用來處理異步操作的。一些異步操作可以寫在action中,如向後臺請求。Action提交的是mutation,再由mutation改變狀態。一個action鍾可以執行多個mutation.
在組件中通過stored.dispatch分發action
store中action下:
接下來由mutation去改變狀態
五、Module
模塊化是爲了優化處理複雜的應用。爲了避免一個store對象過於臃腫,可以將store分割成模塊。每個模塊擁有自己的 state、mutation、action、getter。
我們在充電樁微信的兩個工程中(用戶版本和安裝版本)都使用了module。將微信授權和接口調用相關的狀態及方法單獨放在wechat.js中,並在根store(store.js)引入
參考資料:
https://www.jianshu.com/p/a0c11ae01991