????本文基本上是官方的盜版,用通俗易懂的文字講解Vuex硝逢。學(xué)習(xí)一個新技術(shù)绅喉,必須要清楚兩個W,"What 和Why"徽缚。當你了解了Vuex的優(yōu)勢革屠,才會研究how似芝。
Vuex是什么?
????Vuex 類似 Redux 的狀態(tài)管理器详炬,vuex是一個專門為vue.js設(shè)計的集中式狀態(tài)管理架構(gòu)寞奸,用來管理Vue的所有組件狀態(tài)枪萄。我認為就是前端為了方便數(shù)據(jù)的操作而建立的一個“前端數(shù)據(jù)庫”。
為什么使用Vuex瓷翻?
????當你打算開發(fā)大型單頁應(yīng)用,會出現(xiàn)多個視圖組件依賴同一個狀態(tài)妒牙,來自不同視圖的行為需要變更同一個狀態(tài)韭脊。遇到以上情況時候,你就應(yīng)該考慮使用Vuex了单旁,它能把組件的共享狀態(tài)抽取出來沪羔,當做一個全局單例模式進行管理。這樣不管你在何處改變狀態(tài)象浑,都會通知使用該狀態(tài)的組件做出相應(yīng)修改蔫饰。
? ? 簡單點,且聽下文分解愉豺。模塊間是不共享作用域的篓吁,那么B模塊要拿到A模塊的數(shù)據(jù),拋開什么狀態(tài)管理什么Vuex蚪拦,我們會想到全局變量這個東東杖剪,且命為store吧驰贷,A模塊共享的數(shù)據(jù)作為屬性掛到B模塊上盛嘿,共享數(shù)據(jù)且名為state。B模塊拿到A模塊的數(shù)據(jù)不會一塵不變的括袒,A要操作這個數(shù)據(jù)次兆,那么要在數(shù)據(jù)state改變的時候告知B模塊,那寫個自定義事件锹锰。其實Vuex大致如此芥炭。
如何使用?
? ? 既然說Vuex類似一個“前端數(shù)據(jù)庫”恃慧,我們就聊聊數(shù)據(jù)庫的操作园蝠。首先,數(shù)據(jù)庫你得能取數(shù)據(jù)吧痢士?那么得有一套取數(shù)據(jù)的 API彪薛,既然是獲取,那就叫g(shù)etter 吧良瞧。我們還得存數(shù)據(jù)陪汽,存數(shù)據(jù)就是對數(shù)據(jù)庫的修改,這些 API褥蚯,就叫mutation。Vuex生成的倉庫也就這么出來了况增。State 就是數(shù)據(jù)庫赞庶。Mutations 就是我們把數(shù)據(jù)存入數(shù)據(jù)庫的 API,用來修改state 的。getters 是我們從數(shù)據(jù)庫里取數(shù)據(jù)的 API歧强。后端從前端拿到了數(shù)據(jù)澜薄,總要做個處理吧,處理完了再存到數(shù)據(jù)庫中摊册。其實這就是action的過程肤京。然后我們把這幾部分用store 包一下,” vuex “就搗置出來了茅特。
? ???vuex基本使用流程為: 在action中分發(fā)異步請求, 在異步回調(diào)中提交mutation,在mutation中修改state, 使用getters對state的值進行計算封裝.忘分。
?項目引入 Vuex 的方式如下:
????在根實例中注冊 store 選項,這樣該 store 實例會注入到根組件下的所有子組件中白修,方便后面我們在每個子組件中調(diào)用 store 中 state 里存儲的數(shù)據(jù)妒峦。
????為了能夠很好的隔離頁面view視圖與數(shù)據(jù)的請求, 同時在使用vuex的action分發(fā)異步請求后,能夠接收回調(diào),進行了以下封裝:
一. http的封裝
http模塊包含3個文件,config.js,http.js,api.js
config.js 封裝網(wǎng)關(guān)域名,及所有接口的方法名
http.js?封裝axios基本的get, post請求
api.js?封裝接口名及對應(yīng)的傳輸字段,回調(diào)響應(yīng)數(shù)據(jù)
二. vuex模塊的封裝
vuex通過action異步請求,為了回調(diào)執(zhí)行狀態(tài)
1. view層需要渲染的數(shù)據(jù)
異步請求后,需要提交mutation,修改state,使用getters計算
2. 執(zhí)行某個功能動作,
異步請求后,不需要提交mutation,不需要使用state中的數(shù)據(jù)
在頁面調(diào)用如下:
? ?mapGetters,重點是mapGetters寫在了哪兒兵睛。寫在了 computed里面肯骇,這說明雖然getter我們寫的是函數(shù),但是我們應(yīng)該把它當成計算屬性來用,action放在了 methods 里面祖很,說明我們應(yīng)該把它當成函數(shù)來用笛丙。