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中的tokenassessmentData: val.token}}})]
最后我们在页面里需要使用辅助函数以及dispatch来触发就可以实现数据持久化
这样我们就可以使用vuex来进行储存数据了
