vue如何在页面刷新时保留状态信息

vue如何在页面刷新时保留状态信息

本篇转载至来自简书,仅供自己学习用。

1、通过本地存储 state中的数据,页面刷新成功后再次从本地存储中读取state数据
// vuex中的数据发生改变时触发localStorage的存储操作

localstorage.setItem('state', JSON.stringify(this.$store.state))

// 页面加载的时候在created中获取本地存储中的数据
localStorage.getItem('state') && this.$store.replaceState(JSON.parse(localStorage.getItem('state')));
注意:该操作会频繁的触发localStorage的存取工作

2、 监听页面刷新,触发存取操作
首先在入口组件App.vue中的created中利用localstorage或者sessionStorage来存取state中的数据

// 在页面加载时读取sessionStorage里的状态信息

if ( sessionStorage.getItem('state') ) {
  this.$store.replaceState( Object.assign( {}, this.$store.state,
  JSON.parse(sessionStorage.getItem('state') ) ) )
}

// 页面刷新时将state数据存储到sessionStorage中

window.addEventListener('beforeunload',()=>{
  sessionStorage.setItem('state',JSON.stringify(this.$store.state) )
})

注意:Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象
vuex状态保留
到这里,我们在PC端、安卓端、mac端safair浏览器中均能正常访问,但是在ios端的safair浏览器中存在问题,页面刷新后拿不到数据。

原因:在ios端beforeunload方法未执行,造成state数据未存储到本地,通过查询ios官方文档,文档中说unload和beforeunload已经废弃,使用pagehide作为代替

window.addEventListener('pagehide', () => {
     sessionStorage.setItem('state', JSON.stringify(this.$store.state))
   })

这样一番改动后,果然在PC端、安卓端、ios端均未出现问题

// 会话历史事件

pageshow事件:在用户访问页面时触发;pageshow 事件类似于 onload 事件,onload 事件在页面第一次加载时触发, pageshow 事件在每次加载页面时触发,即 onload 事件在页面从浏览器缓存中读取时不触发。

pagehide事件:在用户离开当前网页时触发;pagehide 事件有时可以替代 unload事件,但 unload 事件触发后无法缓存页面。

作者:苦咖啡Li
链接:

https://www.jianshu.com/p/d3d8cbee46c0

来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue是一种流行的JavaScript框架,用于构建交互式的端应用程序。Vue的一个特点是可以实现无刷新页面状态保留的功能,即刷新页面保留页面状态。以下是一种常用的实现方法: 1. 使用Vue的路由机制:Vue提供了vue-router插件,可以用于管理端路由。在vue-router中,可以定义路由和对应的组件,并通过路由导航切换不同的组件。刷新页面后,由于路由信息仍然保存在浏览器地址栏中,可以通过重新加载对应的路由和组件来保留页面状态。 2. 使用浏览器的本地存储:Vue可以通过浏览器的本地存储机制(如localStorage或sessionStorage)将当页面的数据存储在浏览器中。当页面刷新,可以从本地存储中获取数据并重新渲染页面,从而保留页面状态。 3. 使用Vue的全局状态管理:Vue提供了Vuex插件,用于管理全局的状态。通过将页面状态存储在Vuex的state中,在页面刷新后再次加载,可以从Vuex中获取保存的状态数据,并在组件中重新渲染页面。 需要注意的是,以上方法都是基于端的实现,即刷新页面后重新加载端资源并重新渲染页面。如果涉及到后端数据的状态保留,还需要通过后端的持久化或缓存机制来实现。 ### 回答2: 在Vue刷新页面保留页面状态,可以通过以下步骤实现: 1. 使用Vue Router来进行路由管理,确保每个页面都有一个对应的路由路径。 2. 在Vue组件中,使用Vue Router的导航守卫(Navigation Guards)中的`beforeRouteLeave`钩子函数。通过在该函数中存储当页面状态数据。 例如,在`beforeRouteLeave`函数中,可以使用`this.$store.state`来获取并存储当组件的状态数据。 3. 在进行页面刷新或路由跳转,可以使用`window.localStorage`或`sessionStorage`对象将当页面状态数据存储到浏览器本地存储中。 例如,在`beforeRouteLeave`函数中,可以使用`window.localStorage.setItem('pageState', JSON.stringify(this.$store.state))`来将当页面状态数据存储到localStorage中。 4. 在页面加载完成,可以使用Vue Router的导航守卫中的`beforeRouteEnter`钩子函数来获取并还原之保存的页面状态数据。 例如,在`beforeRouteEnter`函数中,可以使用`this.$store.commit('updateState', JSON.parse(window.localStorage.getItem('pageState')))`来将之存储的状态数据重新赋值给当组件的状态。 通过以上步骤,即可实现在Vue刷新页面保留页面状态的效果。当页面刷新或路由跳转,会将当页面状态数据存储到浏览器本地存储中,再次加载页面则可以将之保存的状态数据还原给组件。这样就能够保留页面状态并避免数据丢失。 ### 回答3: 在Vue中,如果要实现刷新页面保留页面状态,可以借助浏览器的本地存储技术进行操作。 一种常见的做法是在Vue组件的created或mounted钩子函数中,通过localStorage或sessionStorage将数据存储在浏览器中。可以将需要保留的数据进行序列化处理,然后使用setItem方法将其存储到localStorage或sessionStorage中。 例如,在需要保留状态的组件中,可以写入以下代码: ```javascript export default { created() { // 获取存储在localStorage中的状态数据 const stateData = localStorage.getItem('stateData'); // 判断是否存在状态数据 if (stateData) { // 使用JSON.parse方法将序列化的状态数据还原成对象 const state = JSON.parse(stateData); // 将状态数据重新赋值给组件内的数据 this.someData = state.someData; // 其他需要保留的数据字段类似地进行赋值 } }, beforeDestroy() { // 在组件销毁,将当状态数据存储到localStorage中 localStorage.setItem('stateData', JSON.stringify({ someData: this.someData, // 其他需要保留的数据字段类似地存储 })); } } ``` 通过以上代码,在组件创建,会自动从localStorage中获取之存储的状态数据并重新赋值给组件内的数据字段。而在组件销毁,会将当状态数据存储到localStorage中。 这样在刷新页面后,通过获取localStorage中的数据,即可将之状态数据重新赋值给组件,从而达到刷新页面保留页面状态的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值