您好,欢迎来到暴趣科技网。
搜索
您的当前位置:首页使用vuex解决刷新页面state数据消失的问题记录

使用vuex解决刷新页面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中,手动引入插件并配置

    import createPersistedState from "vuex-persistedstate"
    const store = new Vuex.Store({
     // ...
     plugins: [createPersistedState()]
    })
    

    该插件默认持久化所有state,当然也可以指定需要持久化的state:

    import createPersistedState from "vuex-persistedstate"
    const store = new Vuex.Store({
     // ...
     plugins: [createPersistedState({
     storage: window.sessionStorage,
     reducer(data) {
     return {
     // 设置只储存state中的myData
     myData: data.myData
     }
     }
     })]
    

    Copyright © 2019- baoquwan.com 版权所有

    违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

    本站由北京市万商天勤律师事务所王兴未律师提供法律服务