如何在 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如何配置环境变量
1004 0
|
前端开发 测试技术 容器
React 快速实现拖拽改变容器宽高度
React 快速实现拖拽改变容器宽高度
818 0
|
前端开发 JavaScript API
020 Umi@4 中如何实现动态菜单
020 Umi@4 中如何实现动态菜单
1376 0
020 Umi@4 中如何实现动态菜单
UMI多环境配置
一般来说项目不止有dev和prod两个环境,umi可以通过环境变量 UMI_ENV 区分不同环境来指定配置。
1645 0
|
存储 前端开发 UED
React 面包屑组件 Breadcrumb 详解
面包屑导航是现代Web应用中常见的UI元素,帮助用户了解当前位置并快速返回上级页面。本文介绍如何使用React构建面包屑组件,涵盖基本概念、实现方法及常见问题。通过函数式组件和钩子,结合React Router动态生成路径,处理嵌套路由,并确保可访问性。示例代码展示了静态和动态面包屑的实现,帮助开发者提升用户体验。
716 73
antd table合并行或者列(动态添加合并行、列)
在Ant Design的Table组件中实现行或列的合并,通过动态计算数据源中的`rowSpan`或`colSpan`属性来控制,支持对特定字段进行行或列合并,包括多选框列的合并处理。
2152 3
antd table合并行或者列(动态添加合并行、列)
|
缓存 移动开发 JavaScript
《vue2进阶篇:路由》第10章:vue-router,包括基础路由、嵌套路由、路由的query参数和params参数、命名路由、router-link的replace属性、编程式路由、缓存路由组件
《vue2进阶篇:路由》第10章:vue-router,包括基础路由、嵌套路由、路由的query参数和params参数、命名路由、router-link的replace属性、编程式路由、缓存路由组件
714 2
|
缓存 前端开发 JavaScript
React中怎么实现状态自动保存(KeepAlive)?
React中怎么实现状态自动保存(KeepAlive)?
637 0
|
资源调度 前端开发 数据安全/隐私保护
react 动态路由使用
【8月更文挑战第30天】react 动态路由使用
562 0