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


    前言

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

    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

  • 相关阅读:
    Tableau同比卡片制作
    深入了解 Docker 容器操作命令:掌握容器化管理的关键
    Apache Ranger:(二)对Hive集成简单使用
    UMA Frame Buffer Size 核显显存与CSGO帧率
    特征工程(六)—(1)利用PCA进行特征转换
    【Koa】【MongoDB】koa框架连接MongoDB
    双亲委派模型
    使用Spring框架创建一个RESTful API,实现学生信息的管理,包括资源的创建、读取、更新和删除。
    哪些因素会影响离子交换树脂交换能力?树脂交换能力变差的原因?
    CDC复制软件标准模式和自适应模式的区别测试
  • 原文地址:https://blog.csdn.net/web220507/article/details/126941230