vue 刷新页面后state数据被清空的问题解决(转)

时间:2021-08-24
本文章向大家介绍vue 刷新页面后state数据被清空的问题解决(转),主要包括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  })]

原文地址:https://www.cnblogs.com/coderchow/p/15179031.html