1. 程式人生 > >vue全家桶之vuex

vue全家桶之vuex

vuex vuex的由來 vuex是一個數據共享狀態管理的倉庫,主要用於中大型專案中的複雜頁面之間的元件傳值(作者個人理解:類似於github的一種資料共享的倉庫) 它是一種類似於facebook 中 Flux

vuex 的安裝 和在元件中的使用 安裝 在專案中使用 npm i vuex -s 進行安裝 使用 首先建立一個store(倉庫)的資料夾,裡面新建index.js檔案,或者是模組化操作 跟引入元件的方式一樣的引入但是得引入vuex的檔案

import store from '../store/index'
import{mapState,mapGetters,mapMutations,mapActions}from
'vuex'

每一個 Vuex 應用的核心就是 store(倉庫)。“store”基本上就是一個容器,它包含著你的應用中大部分的狀態 (state)。Vuex 和單純的全域性物件有以下兩點不同: 1. Vuex 的狀態儲存是響應式的。當 Vue 元件從 store 中讀取狀態的時候,若 store 中的狀態發生變化,那麼相應的元件也會相應地得到高效更新。 2. 你不能直接改變 store 中的狀態。改變 store 中的狀態的唯一途徑就是顯式地提交 (commit) mutation。這樣使得我們可以方便地跟蹤每一個狀態的變化,從而讓我們能夠實現一些工具幫助我們更好地瞭解我們的應用

引數 state:用來存放元件之間共享的資料。他跟元件的data選項類似,只不過data選項是用來存放元件的私有資料。 用來存放共享的資料 mutations:實際改變 狀態(state) 的唯一方式是通過 提交(commit) 一個 mutation的屬性。mutations下的函式接收state作為引數,接收一個叫做payload(載荷)的東東作為第二個引數,這個東東是用來記錄開發者使用該函式的一些資訊,比如說提交了什麼,提交的東西是用來幹什麼的,包含多個欄位,所以載荷一般是物件(其實這個東西跟git的commit很類似)還有一點需要注意:mutations方法必須是同步方法! 用來儲存資料

actions:既然mutations只能處理同步函式,我大js全靠‘非同步回撥’吃飯,怎麼能沒有非同步,於是actions出現了… **actions是非同步操作** actions和mutations的區別 1.Actions 提交的是 mutations,而不是直接變更狀態。也就是說,actions會通過mutations,讓mutations幫他提交資料的變更。 2.Action 可以包含任意非同步操作。ajax、setTimeout、setInterval不在話下 getters:可以向頁面傳送資料,通過mapGetters 來獲取資料,在傳送前可以修改shuju 輔助函式 **mapState,mapGetters(這兩個是寫在計算屬性當中操作的是資料) mapMutations(同步的),mapActions(非同步的) (這兩個是寫在methods當中 操作的是方法)**

methods:{
...mapMutations(["add","reduce"]),
...mapActions(["addActions"])
},
computed:{
...mapState(["count"]),
...mapGetters(["count"])
}

各個型別的 API各司其職,mutation 只管存,你給我(dispatch)我就存;action只管中間處理,處理完我就給你,你怎麼存我不管;Getter 我只管取,我不改的。 action放在了 methods 裡面,說明我們應該把它當成函式來用(講道理,鉤子函式也應該可以的) mutation是寫在store裡面的,這說明,它就是個半成品,中間量,我們不應該在外面去操作它。getter寫在了 computed 裡面,這說明雖然 getter我們寫的是函式,但是我們應該把它當成計算屬性來用。