Vuex之理解state

理解state

1.什麼是statevue

  • 上一篇文章說了,Vuex就是提供一個倉庫,倉庫裏面放了不少對象。其中state就是數據源存放地,對應於與通常Vue對象裏面的data(後面講到的actionsmutations對應於methods)。vuex

  • 響應書存儲state裏面存放的數據是響應式的,Vue組件從store中讀取數據,如果store中的數據發生改變,依賴這個數據的組件也會發生更新。(這裏「狀態」=「數據」),也就是是說數據和視圖是同步的。segmentfault


2.局部狀態數組

  • 獲取:在Vue組件中獲取數據,最直接的能夠經過計算屬性中獲取;app

  • 組件仍然能夠保存局部狀態:雖說VuexStore倉庫讓咱們同一管理數據變得更加方便,可是代碼一多也會變得冗長,有些組件的數據是本身嚴格自用,咱們能夠將state放在組件自身,做爲局部數據,專供此組件使用,其餘的組件不能用。函數


3.mapStatethis

  • mapState的做用是把全局的 stategetters 映射到當前組件的 computed 計算屬性中,this.$store.statecode

  • 使用示例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
       }
相關文章
相關標籤/搜索