why?
在vuex的时候 刷新以后里面存储的state就会被浏览器释放掉,因为我们的state都是存储在内存中的,所以一刷新页面就会把state中的数据重置,这就涉及到vue数据持久化的问题。
使用vuex的插件 来解决
使用vuex-persistedstate
首先我们先安装这个插件
npm i -S vuex-persistedstate
配置使用
在vuex初始化的时候作为组件去引入
import { createStore, createLogger } from 'vuex'
import home from './modules/home'
import dome2 from './modules/dome2'
import persistedState from 'vuex-persistedstate'
const debug = process.env.NODE_ENV !== 'production'
export default createStore({
modules: {
home,
dome2
},
strict: debug,
plugins: debug ? [createLogger(),persistedState()] : []
});
特殊情况
vuex-persistedstate默认使用localStorage来固化数据,一些特殊情况要如何应对呢?(如:Mac中的safari的无痕浏览模式)
这时候就需要使用sessionStorage
plugins: [
persistedState({ storage: window.sessionStorage })
]
还有一种就是使用cookie的时候
import persistedState from 'vuex-persistedstate'
import * as Cookies from 'js-cookie'
export default new Vuex.Store({
// ...
plugins: [
persistedState({
storage: {
getItem: key => Cookies.get(key),
setItem: (key, value) => Cookies.set(key, value, { expires: 7 }),
removeItem: key => Cookies.remove(key)
}
})
]
})
使用vuex-persistedstate指定需要持久化的state
import persistedState from "vuex-persistedstate"
plugins: [
persistedState({
storage:window.sessionStorage,
reducer(val) {
return {
// 只储存state中的token
assessmentData: val.token
}
}
}
)]
最后我们在页面里需要使用辅助函数以及dispatch来触发就可以实现数据持久化
这样我们就可以使用vuex来进行储存数据了