vuex狀態管理模式

一、安裝

npm install vuex --save

二、使用

import Vue from 'vue'
import vuex from 'vuex'
Vue.use(vuex)

三、核心概念

1.state(vuex中的數據源,存放所有數據)--------login.js

const state ={
    countser:null   //登陸id
}

2.getter(相當於vue中的computed計算屬性,用來監聽state中值的變化)

3.mutation(修改值,更改vuex的store中的狀態的唯一方法就是提交 mutations。只能是同步操作)--------login.js

mutations 上存放的一般就是我們要改變 state 的一些方法。不能直接調用,調用時需要store.commit方法

const mutations ={
    //登陸id
    increment(state,n){
        state.countser=n
    }
}

4.action(action提交的是mutation,而不是直接更改狀態。可以是異步操作)--------login.js

mutation 像事件註冊,需要相應的觸發條件。而 Action 就那個管理觸發條件的。

const actions ={
    //登陸id
    increment(context,args){              //context是和store具有相同方法和屬性的一個對象
        context.commit('increment',args);   //increment就是Mutation裏的方法名
    },
}

5.moudel(將 store 分割成模塊module。每個模塊擁有自己的 state、mutation、action、getter)

6.命名空間(在index.js最終導出時,可以去給對應的模塊命名方便使用)--------login.js

export default {
    namespaced: true, //vuex命名空間
}

注:最後導出--------login.js

export default {  //導出
    namespaced: true, //vuex命名空間
    state,
    actions,
    mutations
}

7.vuex持續化--------index.js

vuex保存的數據在頁面刷新、窗口關閉等情況下會被清除,所以用vuex持續化來解決這個問題,這樣它的數據就不會被清除了。

①安裝

npm install vuex-persistedstate --save

②導入---------index.js

import createPersistedState from "vuex-persistedstate" //vuex 持續化

③實例化時添加

plugins: [
    createPersistedState({
	      storage: {
	        getItem: key => wx.getStorageSync(key),
	        setItem: (key, value) => wx.setStorageSync(key, value),
	        removeItem: key => () => {}
	      }
	 })
]

或者

conststore = newVuex.Store({
 
  plugins: [createPersistedState({
 
  storage:window.sessionStorage,
 
      reducer(val)  {
 
          return {
 
              assessmentData: val.assessmentData
 
          }
 
      }
 
  })]

例子:

import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from "vuex-persistedstate" //vuex 持續化
Vue.use(Vuex)
import loginuser from './modules/login'    //導入模塊
export default new Vuex.Store({
    plugins: [createPersistedState({
        storage: window.localStorage,      //數據存儲位置
        reducer(val)  {
            return {
                loginuser:{  //選擇指定模塊數據存儲
                    countser:val.loginuser.countser
                }
            }
        }
    })],
    // 導出 store 對象
    modules:{
        loginuser:loginuser
    }
})

mutation 就像事件類型,需要給定某個動作來進行觸發,這就是分發 action。Action 通過 store.dispatch 方法觸發。

注:存儲

this.$store.dispatch('loginuser/increment',res.data.id);

注:當vuex存的值發生變化時,取值的地方可以直接響應爲新的值。但是local storage和session storage不能響應。

local storage---永久保存        session storage----臨時保存(瀏覽器關閉或刷新時會丟失)

發佈了64 篇原創文章 · 獲贊 9 · 訪問量 7043
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章