由于vue自身特性的原因,vuex中的数据在页面刷新之后其中的数据会初始化,这就导致组件之间通过vuex传递的数据在用户f5刷新页面之后会丢失。
页面刷新后,想保存页面未保存的数据。我们总是习惯于放在浏览器的sessionStorage和localStorage中。但是用了vue后,vuex便可以被应用了。
vuex的优劣势:
优势:相比sessionStorage,存储数据更安全,sessionStorage可以在控制台被看到
劣势:在F5刷新页面后,vuex会重新更新state,所以,存储的数据会丢失。
-
为了克服这个问题,vuex-persistedstate和 vuex-persist出现了~~
原理:
将vuex的state存在localStorage或sessionStorage或cookie中一份
刷新页面的一瞬间,vuex数据消失,vuex回去sessionStorage中哪会数据,变相的实现了数据刷新不丢失~
区别与建议: 个人还是推荐使用vuex-persistedstate,因为使用vuex-persist在一些浏览器,ie和微信会出现语法报错的问题
vuex-persist是TypeScript类型,vuex-persistedstate是JavaScript类型,默认vue的webpack是没有对TypeScript进行编译的
如果想要使用vuex-persist需要手动配置一下webpack,使用 webpack 编译 TypeScript 代码
第一种:vuex-persistedstate
安装vuex-persistedstate
npm install vuex-persistedstate --save
引入及配置
在store下的index.js中
import Vue from 'vue';
import Vuex from 'vuex';
import info from './modules/user-info';
import knowledge from './modules/knowledge';
import sixElements from './modules/six-elements';
import difficultySpeed from './modules/difficulty-speed';
import createPersistedState from 'vuex-persistedstate';
Vue.use(Vuex);
const store = new Vuex.Store({
modules: {
info,
knowledge,
sixElements,
difficultySpeed
},
plugins: [
createPersistedState({
storage: window.sessionStorage,
paths: ["info", "knowledge", "sixElements", "difficultySpeed"]
})
],
});
export default store;
第二种:vuex-persist
安装vuex-persist
npm install vuex-persist --save
引入及配置
在store下的index.js中
import Vue from 'vue';
import Vuex from 'vuex'
import VuexPersistence from 'vuex-persist'
import conversion from './modules/conversion'
import userInfo from './modules/userInfo'
import tagviews from './modules/tagviews'
Vue.use(Vuex);
const vuexLocal = new VuexPersistence({
key: 'message',
storage: window.localStorage,
reducer: (state) => ({userInfo: state.userInfo})
})
const vuexSession = new VuexPersistence({
key: 'message',
storage: window.sessionStorage,
reducer: (state) => ({tagviews: state.tagviews})
})
const store = new Vuex.Store({
modules: {
conversion,
userInfo,
tagviews
},
plugins: [vuexSession.plugin, vuexLocal.plugin]
})
export default store