• 路由跳转时的页面状态保存


    前言

    我们在开发网页时,经常会遇到一种情况——在一个页面对页面初始状态进行了修改(如已请求到的数据、表单数据、滚动高度等等),跳转到另外一个页面之后再返回到原页面(路由回退),原页面需要保持原先的状态不变。但如果不做额外处理,往往会出现原页面历史状态丢失、被重置为初始状态的情况。

    SPA 与 MPA

    1. SPA(单页应用)

    这种情况常见会出现在 SPA 中,因为 SPA 是使用单页来模拟多页,页面跳转时并没有请求一个新的页面应用,所以 SPA 在路由跳转时会丢失历史页面的普通状态。

    2. MPA(多页应用)

    是否在 MPA 中就不会出现这种情况了呢?也不尽其然。

    在多年以前,互联网上全都是些简单的 MPA 应用,一个页面就是一个 html 文件,一个网站就是一组 html。而一个页面的所有数据,就都在这个 html 文件(或者其他资源文件)中,在浏览器获取到 html 等资源文件的时候,也就随之获取到了数据。这种情况下,不会出现路由跳转导致丢失数据的情况,而滚动高度会被浏览器保存,所以只有一些表单等用户输入的信息会丢失。

    但是,随着前端技术的发展和潮流的变化,更多复杂的情况出现了,比如无限下拉滚动加载数据,比如 h5 移动端常见的数据使用 ajax 加载,带来了更多的变化。

    数据使用 ajax 加载,意味着数据与 html 的完全解耦。这种情况下,即使是 MPA ,也会出现路由跳转导致数据丢失的情况。

    因为这种情况在移动端很常见,部分 Android 浏览器与大多数 IOS 浏览器针对这一现象做了额外的优化,在路由跳转后仍保留原页面资源,这样就避免了路由跳转导致原页面数据丢失。

    各平台情况

    1. PC 端

    各种 PC 端浏览器历史悠久,基本都没有做额外优化,只会保存滚动高度。

    但是对于这种情况,参考主流网站与用户习惯,页面往往不会直接跳转(window.location.href),而是打开新的标签页(window.open),这样问题就不存在了。

    2. 移动端

    上面也提到了,部分 Android 浏览器与大多数 IOS 浏览器针对这一现象做了额外的优化,在路由跳转后仍保留原页面资源&#x

  • 相关阅读:
    Excel 导入
    学计算机必参加的含金量赛事!
    第九课 排序
    羽夏 MakeFile 简明教程
    Python---列表 集合 字典 推导式(本文以 字典 为主)
    【vue2第十五章】VueRouter 路由配置(VueRouter)与使用 和 router-link与router-view标签使用
    力扣(LeetCode)算法_C++——有效的数独
    element-ui使用el-date-picker日期组件常见场景
    微信小程序预览图片无法上传问题
    华为云HECS云服务器docker环境下安装nacos
  • 原文地址:https://blog.csdn.net/web220507/article/details/126941230