最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

    正文概述 掘金(Mike595)   2021-07-20   984

    文件目录

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

    利用 pagehide 事件在用户刷新页面时将vuex的store存入sessionstorage中,然后在页面加载时,从sessionstorage中获取,replaceState store

      created() {
        // 在页面加载时读取sessionStorage里的状态信息
        let store = window.sessionStorage.getItem("store");
        if (store !== null) {
          this.$store.replaceState(
            Object.assign({}, this.$store.state, JSON.parse(store))
          );
        }
        // pagehide 解决ios移动端不支持beforeunload,安卓端两个都可以用
        // 在页面刷新时将vuex里的信息保存到sessionStorage里
        window.addEventListener('pagehide', () => {
          sessionStorage.setItem('store', JSON.stringify(this.$store.state));
        });
        
        if(window.localStorage.token) {
          this.$store.dispatch('getUserInfo', window.localStorage.username).then(res => {
            console.log(res)
          })
        }
      }
    

    解析代码:

        1. 在App.vue 中的 create() 生命周期中加载,是因为 index.hxml 为 vue 项目默认首页,里面默认引用了 App.vue 根组件,每次页面初次打开、刷新、跳转等都会先加载根组件,在根组件上,进行页面事件的监听,这样就可以通过下面的方式防止 Vuex 中的 state 数据丢失

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

        2. window.addEventListener 事件监听 ,监听 onpagehide 事件(在用户离开网页时触发),本来想使用 beforeunload 事件,但是在ios端不支持,则使用了 pagehide 替代。replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

    onunload离开网页触发

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

    beforeunload 事件

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

        3. 刚开始打开 App时,sessionStorage 里面的数据为空(没有 store)、Vuex 里面的数据为原始状态

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

        4. 当我们在登录页面时,输入账号和密码后,点击登录时,跳转到我的页面,在这一过程中,我们设置了利用了Vuex中的调用异步的方法dispatch去调用 Vuex 里面的 action 方法–doLogin 方法、getUserInfo 方法,这两个方法里面,我们更改了 Vuex 中 state 的状态,这样 state 则保存了最新的数据,即代码效果的数据效果

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

        5. 当完成上面操作后,window.addEventListener 开始监听到 pagehide 页面跳转,这时候则在 sessionStorage 设置了 store 这个key 用来保存 当前 vuex 里面的 state 的状态,注意 sessionStorage.setItem() 里面的key 和 value 都要 " ",所以这里使用JSON.stringify(),把 JSON 对象 转化为 JSON 字符串,从而实现保存,这时的状态是这样的

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

        6. 在进入页面时,首先执行 App.vue 根组件里面的create() 生命周期函数,设置一个变量 store 等于 当前页面中 window.sessionStorage.getItem() 获取到的 store 值,如果 store 不为空(不会为空–因为我们在事件监听中设置了store = Vuex 中的 state),则利用this.store.replaceState()+Object.assign()把当前浏览器中sessionStorage里面的存储的store(即变量store)、this.store.replaceState()+ Object.assign() 把当前浏览器中 sessionStorage 里面的 存储的 store(即变量 store)、 this.store.replaceState()+Object.assign()把当前浏览器中sessionStorage里面的存储的store(即变量store)、this.store.state 、{} 三者合并,当有重复的键值对时,Object.assign() 会使用后面值替代前面的

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

        7. 这样每次页面有刷新、跳转、等操作时,都会保存到最新的状态值,存储在当前的页面(跳转后、刷新后,等,当前会话不关闭即可~~)

    代码效果

    这里只在 Vuex 的 user 模块中设置了 state 状态,所以会显示 user ,这里是用了模块化的思想~

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

    replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题


    起源地下载网 » replaceState+sessionStorage解决页面刷新后原先在Vuex中的state丢失的问题

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元