vuex的持久化
安装依赖
npm install vuex- persistedstate - S
store中引用
import Vue from 'vue' ;
import vuex from 'vuex' ;
import getters from './getters'
import mutations from './mutations'
import createPersistedState from 'vuex-persistedstate' ;
Vue. use ( vuex) ;
const PATHS = [ 'usrInfo' , 'configInfo' , 'roleInfo' , 'roleList' , 'roleRight' ]
const vuexLocal = createPersistedState ( {
key: 'vuexLocal' ,
storage: window. localStorage,
paths: PATHS
} ) ;
const store = new vuex. Store ( {
state: {
uesrInfo: '' ,
configInfo: '' ,
roleInfo: ''
} ,
getters: { getters} ,
mutations: { mutations} ,
actions: { } ,
modules: { } ,
plugins: [ ]
} )
export default store
vuex的几种属性
getters
类似于计算属性 getters有两个参数
依据state里面的属性,加工过后暴露给外面 当前getters对象,用于将getters下的其他getter拿来用
const getUsrInfo = state => {
return state. uesrInfo
}
const getConfigInfo = state => {
return state. configInfo
}
const gotRoleInfo = ( state, getters) => {
return getters. roleInfo + state. roleInfo
}
export default {
getUsrInfo,
getConfigInfo,
gotRoleInfo
}
mutations
mutations是操作state数据的方法的集合,比如对该数据的修改、增加、删除等等。 参数state state是当前VueX对象中的state
export const setUserInfo = ( state, param) {
state. userInfo = param. userInfo
}
export const setConfigInfo = ( state, param) {
state. configInfo = param. configInfo
}
export const setRoleInfo = ( state, param) {
state. roleInfo = param. roleInfo
}
actions
由于直接在mutation方法中进行异步操作,将会引起数据失效。 所以提供了Actions来专门进行异步操作,最终提交mutation方法。 用于异步处理数据,mutations只能同步处理数据 参数context 相当于箭头函数中的this
initUserInfo ( context, payload) {
return new Promise ( async ( resolve, reject) => {
alert ( '这是参数' , payload)
const { data: { data, flag} } = await httpServer. get ( url, { id: 2 } ) ;
( ! flag || ! data) && reject ( '获取用户信息失败' ) ;
context. commit ( 'setUserInfo ' , data || payload) ;
resolve ( ) ;
} )
} ,
调用
import { mapGetters, mapActions, mapMutations} from 'vuex'
methods: {
... mapMutations ( [ "setUserInfo" , "setConfigInfo" , "setRoleInfo" ] )
... mapActions ( [ "initUserInfo" ] )
} ,
computed: {
... mapGetters ( {
'userInfo' : 'getUsrInfo' ,
'configInfo' : 'getConfigInfo' ,
'roleInfo' : 'getUserId' ,
} ) ,
... mapGetters ( [ "getUsrInfo" , "getConfigInfo" , "getRoleInfo" ] )
}
this . $store. commit ( 'setUserInfo' , { userInfo: '这是用户信息' } )
this . $store. commit ( {
type: 'setUserInfo' ,
payload: { userInfo: '这是用户信息' }
} )
this . $store. dispatch ( 'initUserInfo' , { age: 15 } )
this . $store. getters. getUsrInfo