视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
使用vuex解决刷新页面state数据消失的问题记录
2020-11-27 21:57:33 责编:小采
文档


在实际的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
     }
     }
     })]
    

    下载本文
    显示全文
    专题