Vue狀態管理:vuex

 做用vue

由於vue是單向數據流,父子組件數據傳遞爲單向流動(父->子) ,子組件向父組件傳遞須要用$emit方法,兄弟組件之間數據傳遞經過他們的父元素進行數據交換,若是是頁面組件,則經過路由傳參,vuex解決的就是全部組件之間的數據交換,事實動態更新。vuex

 爲何不用全局變量而要用vuex數組

由於全局變量只有引用類型(對象、數組)才能夠實現實時更新 ,普通類型數據沒法實時更新瀏覽器

 頁面刷新後store中的數據就恢復初始化了怎麼辦緩存

如刷新頁面還要保留的數據就放在瀏覽器緩存中 異步

 如何使用vuex模塊化

// store.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const  portalMod={
    //狀態數據源,相似於data對象
    state:{
        pageNum: 2,
        myNum:2,
    },
    //狀態數據操做方法,相似於methods
    mutations:{
        incrementPage (state,n) {
            state.pageNum+=n
        },

        incrementmyNum(state,n){
            state.myNum+=n
        }
    },
    //狀態計算屬性,相似於computed,只支持同步
    getters:{
        compPagenum:function (state,getters) {
            return state.pageNum+getters.compmyNum;
        },
        compmyNum:function (state) {
            return state.myNum+'的getter'
        }
    },
    /和getters相似,不過支持異步
    actions:{
        incrementAsync (context,n) {
            setTimeout(() => {
                context.commit('incrementPage',n)
            }, 1000)
        }
    }

}




// 下面這個至關關鍵了,全部模塊,註冊才能使用
export default new Vuex.Store({
    modules:{   //模塊化,便於管理狀態屬性
        portalMod:portalMod,
    }
})

 

import { mapState } from 'vuex'


computed: mapState({    //經過計算屬性獲取狀態屬性
            pageNum: state=> state.portalMod.pageNum,
            comp_pageNum:function () {
                return this.$store.getters.compPagenum
            }
        }),



 add:function () { //經過commit動態修改狀態屬性,數據實時聯動
                this.$store.commit('incrementmyNum',9)
            }
相關文章
相關標籤/搜索