vue 刷新页面后state数据被清空的问题解决(转)
在实际的vue项目中,当我们的应用遇到多个组件之间的共享问题时,通常会用到Vuex(状态管理插件,可以解决不同组件之间的数据共享和数据持久化),解决组件之间同一状态的共享问题。
因子:
Vuex优势:相比sessionStorage,存储数据更安全,sessionStorage可以在控制台被看到。
Vuex劣势:在刷新页面后,vuex会重新更新state,所以,存储的数据会丢失。
言而总之:
实际问题:在vue项目中,使用Vuex做状态管理时,调试页面时,刷新后state上的数据消失了,该如何解决?
解决思路:将state中的数据放在浏览器sessionStorage和localStorage
解决办法:
第一种:存储到localStorage
通过监听页面的刷新操作,即beforeunload前存入本地localStorage,页面加载时再从本地localStorage读取信息
在App.vue中加入下面代码
created(){ //在页面刷新时将vuex里的信息保存到localStorage里 window.addEventListener("beforeunload",()=>{ localStorage.setItem("messageStore",JSON.stringify(this.$store.state)) }) //在页面加载时读取localStorage里的状态信息 localStorage.getItem("messageStore") && this.$store.replaceState(Object.assign(this.$store.state,JSON.parse(localStorage.getItem("messageStore"))));
第二种:使用vuex-persistedstate 插件
安装插件:npm install vuex-persistedstate --save
配置:
在store的index.js中,手动引入插件并配置
1 import createPersistedState from "vuex-persistedstate" 2 const store = new Vuex.Store({ 3 // ... 4 plugins: [createPersistedState()] //默认持久化所有state 5 })
1 import createPersistedState from "vuex-persistedstate" 2 const store = new Vuex.Store({ 3 // ... 4 plugins: [createPersistedState({ 5 storage: window.sessionStorage, 6 reducer(data) { 7 return { 8 // 设置只储存state中的myData 9 myData: data.myData 10 } 11 } 12 })]

浙公网安备 33010602011771号