state
1.什麼是
state
?vue
上一篇文章說了,Vuex
就是提供一個倉庫,倉庫裏面放了不少對象。其中state
就是數據源存放地,對應於與通常Vue
對象裏面的data
(後面講到的actions
和mutations
對應於methods
)。vuex
響應書存儲:state
裏面存放的數據是響應式的,Vue
組件從store
中讀取數據,如果store
中的數據發生改變,依賴這個數據的組件也會發生更新。(這裏「狀態」=「數據」),也就是是說數據和視圖是同步的。segmentfault
2.局部狀態數組
獲取:在Vue
組件中獲取數據,最直接的能夠經過計算屬性中獲取;app
組件仍然能夠保存局部狀態:雖說Vuex
的Store
倉庫讓咱們同一管理數據變得更加方便,可是代碼一多也會變得冗長,有些組件的數據是本身嚴格自用,咱們能夠將state
放在組件自身,做爲局部數據,專供此組件使用,其餘的組件不能用。函數
3.
mapState
this
mapState
的做用是把全局的 state
和 getters
映射到當前組件的 computed
計算屬性中,this.$store.state
。code
使用示例orm
import {mapState} from 'vuex' export default { computer : mapState({ count: state => state.count, 'count' // 映射 this.count 爲 store.state.count }) }
看看源碼對象
export function mapState (states) { const res = {} //定義一個對象 normalizeMap(states).forEach(({ key, val }) => { // normalizeMap()函數初始化states數據 res[key] = function mappedState () { return typeof val === 'function' // 判斷val是不是函數 ? val.call(this, this.$store.state, this.$store.getters) // 若val是函數,將store的state和getters做爲參數,返回值做爲mapped State的返回值 : this.$store.state[val]}}) return res // 返回的是一個函數 } //初始化方法 ------------------------------------------------------------------------- function normalizeMap (map) { return Array.isArray(map) //判斷state是不是數組 ? map.map(key => ({ key, val: key })) // 是數組的話,調用map方法,將每個數組元素轉換成{key,val:key} : Object.keys(map).map(key => ({ key, val: map[key] })) // 不然就是對象,遍歷對象,將每個val變成val:key }