使用 vuex-persistedstate 持久化 vuex

  vuex 的持久化可避免刷新页面就更新状态,记录一下简单使用。

一、所有模块持久化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from 'vuex-persistedstate'
Vue.use(Vuex)

let moduleFiles = require.context('./modules', true, /\.js$/)
let modules = {}
moduleFiles.keys().forEach(modulePath => {
const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
modules[moduleName] = moduleFiles(modulePath).default
})

export default new Vuex.Store({
plugins: [createPersistedState()],
modules
})

二、部分模块持久化

  仅针对某个模块持久化时,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from 'vuex-persistedstate'
import user from './modules/user'
import app from './modules/app'
Vue.use(Vuex)

export default new Vuex.Store({
// state 持久化,防止f5刷新,导致数据消失
plugins: [createPersistedState({
storage: window.localStorage,
reducer (val) {
return {
// 只保存module user内部所有变量持久化
user: val.user
}
}
})],
state: {},
mutations: {},
actions: {},
modules: {
app,
user
}
})

三、/modules/user.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
export default {
namespaced: true,
state: {
accessToken: '',
userInfo: null,
bayonet: null,
corpId: '',
},
getters: {},
mutations: {
setUserInfo: (state, userInfo) => {
state.userInfo = userInfo
},
setAccessToken: (state, accessToken) => {
state.accessToken = accessToken
},
setCorpId: (state, corpId) => {
state.corpId = corpId
},
setBayonet: (state, bayonet) => {
state.bayonet = bayonet
}
},
actions: {}
}
以上

随笔标题:使用 vuex-persistedstate 持久化 vuex

随笔作者:刘先玉

发布时间:2020年08月18日 - 13:25:29

最后更新:2020年08月18日 - 13:25:29

原文链接:https://liuxianyu.cn/article/vuex-persistedstate.html