如何在 Umi 中使用 Keep Alive

简介: 如何在 Umi 中使用 Keep Alive

image.png

移动端中,用户访问了一个列表页,上拉浏览列表页的过程中,随着滚动高度逐渐增加,数据也将采用触底分页加载的形式逐步增加,列表页浏览到某个位置,用户看到了感兴趣的项目,点击查看其详情,进入详情页,从详情页退回列表页时,需要停留在离开列表页时的浏览位置上


类似的数据或场景还有已填写但未提交的表单管理系统中可切换和可关闭的功能标签等,这类数据随着用户交互逐渐变化或增长,这里理解为状态,在交互过程中,因为某些原因需要临时离开交互场景,则需要对状态进行保存

(from:https://github.com/CJY0208)


如何在 Umi 中使用 Keep Alive

Umi 项目中安装 umi-plugin-cache-route 插件

yarn add umi-plugin-cache-route

在配置中使用

export default {
plugins: [
    ['umi-plugin-cache-route', {
keepalive:['route path','route path']
    }],
  ],
}

执行初始化命令

umi keepalive

如果是配置式路由,可以直接在路由配置的时候,写明 keepAlive: true

export default {
plugins: [
    ['umi-plugin-cache-route'],
  ],
routes: [
    {
path: '/',
component: '../layouts/index',
routes: [
        {
path: '/list',
component: './list',
keepAlive: true,
        },
        {
path: '/item',
component: './item',
        },
      ],
    },
  ]
};

如果是约定式路由,可以直接配置keepalive属性

export default {
plugins: [
    ['umi-plugin-cache-route', {
keepalive:['/list']
    }],
  ],
}

被标记 keepAlive: true 和被配置 keepalive:['/list'] 的路由都会被一直保持,你可以在你觉得不需要的时候,使用 dropByCacheKey 手动解除。

import { dropByCacheKey } from 'umi';
export default () => {
const clearCache = () => {
    dropByCacheKey('/list');
  };
return (
<Card>
      <Button onClick={clearCache}>clear list page cache</Button>
    </Card>
  );
};

实现效果如下:从列表页到详情页,列表页被保存,通过在详情页手动解除。

1.gif

为了满足我们内部几个项目的紧急需求,通过覆盖 Umi 文件的形式实现的,不是最终最优解,但可用于生产环境

实现方案使用的是 CJY0208react-router-cache-route

目录
相关文章
|
测试技术 Windows
umi如何配置环境变量
umi如何配置环境变量
1266 0
ant design pro 面包屑和多标签页
ant design pro 面包屑和多标签页
1060 0
|
前端开发 JavaScript API
020 Umi@4 中如何实现动态菜单
020 Umi@4 中如何实现动态菜单
1552 0
020 Umi@4 中如何实现动态菜单
|
9月前
|
Ubuntu Linux 测试技术
Linux系统离线安装Docker完整指南
本文详细介绍在Ubuntu 24等Linux系统中离线安装Docker的完整流程,适用于内网隔离环境。涵盖安装包下载、`docker.service`配置、安装与卸载脚本编写、权限设置、镜像测试及用户组配置,并包含docker-compose的离线部署方法,助力高效完成生产环境搭建。
10617 4
Linux系统离线安装Docker完整指南
|
移动开发 前端开发 JavaScript
React 视频播放器组件:Video Player
本文介绍了如何使用 React 和 HTML5 `&lt;video&gt;` 标签构建自定义视频播放器组件。首先,通过创建基础的 React 项目和 VideoPlayer 组件,实现了基本的播放、暂停功能。接着,探讨了常见问题如视频加载失败、控制条样式不一致、性能优化不足及状态管理混乱,并提供了相应的解决方案。最后,总结了构建高效视频播放器的关键要点,帮助开发者应对实际开发中的挑战。
1529 27
|
缓存 前端开发 JavaScript
React中怎么实现状态自动保存(KeepAlive)?
React中怎么实现状态自动保存(KeepAlive)?
817 0
antd table合并行或者列(动态添加合并行、列)
在Ant Design的Table组件中实现行或列的合并,通过动态计算数据源中的`rowSpan`或`colSpan`属性来控制,支持对特定字段进行行或列合并,包括多选框列的合并处理。
2607 3
antd table合并行或者列(动态添加合并行、列)
|
缓存 JavaScript 前端开发
拿下奇怪的前端报错(三):npm install卡住了一个钟- 从原理搞定安装的全链路问题
本文详细分析了 `npm install` 过程中可能出现的卡顿问题及解决方法,包括网络问题、Node.js 版本不兼容、缓存问题、权限问题、包冲突、过时的 npm 版本、系统资源不足和脚本问题等,并提供了相应的解决策略。同时,还介绍了开启全部日志、使用替代工具和使用 Docker 提供 Node 环境等其他处理方法。
16945 2
|
JavaScript 前端开发 安全
【Vue3 + Vite】6个非常强大的后台管理项目!开源且免费!
【Vue3 + Vite】6个非常强大的后台管理项目!开源且免费!