背景

PC端管理系统,采用 ant design pro 方案,它是阿里的一个管理系统框架,技术栈是react。

相比vue,react一个先天不足是不支持 keep-alive,所以管理系统中的多页签功能难以实现。

调研

由于官方不支持,只能网上寻找各方大佬的开源插件。

目前选择的是 umi-plugin-keep-alive ,它是在 react-activation 基础上,针对阿里自己的 umi 进行的定制化封装,antd pro 核心也是 umi 技术,所以 umi-plugin-keep-alive 与 antd pro 可以完美搭配。

实现

插件找到了,接下来的难点是对框架的改造。

由于 ant design pro 封装的很厉害,操作灵活性并不高,以下是改造的一个思路。

1. 创建 BaseLayout 和 BaseTabs 两个组件

这一步是标签页与缓存的实现

// BaseTabs/index.tsx
import { Tabs } from 'antd';
import React from 'react';
import { useAliveController, useHistory, useLocation } from 'umi';
const { TabPane } = Tabs;export default (): React.ReactElement => {const { pathname } = useLocation();const history = useHistory();// 获取缓存列表const { getCachingNodes, dropScope } = useAliveController();const cachingNodes = getCachingNodes();/*** 点击tab,跳转页面*/const clickTab = (path: string) => {history.push(path);};/*** 关闭tab,销毁缓存*/const editTab = (path: any) => {dropScope(path);// 关闭当前页面,需跳转到其他页签if (path === pathname) {const index = cachingNodes.findIndex((item) => item.name === path);if (index > 0) {history.push(cachingNodes[index - 1].name as string);} else {history.push(cachingNodes[1].name as string);}}};return (<Tabstype="editable-card"hideAddsize="small"activeKey={pathname}onTabClick={clickTab}onEdit={editTab}>{cachingNodes.map((node) => (<TabPane tab={node.tabName} key={node.name} closable={cachingNodes.length > 1} />))}</Tabs>);
};
// BaseLayout/index.tsx
import React from 'react';
import { KeepAlive } from 'umi';
import BaseTabs from '../BaseTabs';export default (props: any): React.ReactElement => {const { children, location } = props;const { pathname } = location;return (<><BaseTabs /><KeepAlive id={pathname} name={pathname} tabName={props.route.name}>{children}</KeepAlive></>);
};

2. 将BaseLayout应用起来

这一步被卡了很久,不知道该怎么把功能和框架相关联,原来需要在路由配置里加 wrappers 属性,这个属性官方文档中没有体现,翻阅了很多网上案例才找到,代码如下。(这里是举个例子,实际可以遍历 routes统一加属性)

这样写好后,系统就可以自动根据路由,完成缓存的功能了。

React + Ant Design Pro项目实现keep-alive页签相关推荐

  1. react ant design pro typescript springboot activiti权限、工作流框架

    是什么? 使用springboot,activiti,mybatis,react,ant design pro,typescript 开发的后台管理系统(包含权限管理.工作流等功能),真正前后端分离的 ...

  2. React Ant design pro 访问服务器接口,获取数据显示

    React Ant design pro 访问服务器接口 一.前两天更新了Ant design pro环境搭建,需要了解的小伙伴可以看一下之前的内容,还有react基础教程噢. 二.框架搭建完后,一般 ...

  3. Ant Design Pro项目启动报错 ChunkError mf-va_remoteEntry umi

    版本: Ant Design Pro 5,typescript 背景: 有个项目写完,后期等待沟通,于是去做了其他项目.回头再来看这个项目时,无法启动,删除node_modules也无法启动. 解决办 ...

  4. Ant Design Pro模板无多标签页解决方案

    白嫖了无尽岁月,我也来写个博客.希望能帮到你! 网上一些方案都是把官方模板替换成自己写的.本人的方案是在模板的基础上进行添砖加瓦,理解起来更容易! 解决思路是: 记录页面切换时的路由(onPageCh ...

  5. Ant Design Pro 项目图表组件点击事件

    背景:使用框架配套图表组件charts 要求柱形图可实现点击事件 方法:onReady 官网:https://charts.ant.design/zh/docs/api/options/events ...

  6. 【Error】初始化ant design pro项目时遇到“pro 不是内部或外部命令”

    解决办法: 将 pro create myapp 改为 npx pro create myapp 即可解决

  7. Linux部署Ant Design Pro项目及nginx部署

    通过umi命令进行构建 通过umi命令进行构建,构建成功后悔生成静态页面: nginx部署 生成的静态页面需要通过nginx进行访问,并且请求数据的代理也需要通过nginx进行代理: ①安装nginx ...

  8. Ant Design Pro 开启默认进入登录页

    src/utils/authority.js getAuthority方法中 return authority || ['admin']; 改为 return authority || ['guest ...

  9. Ant Design Pro V4下载运行

    简介:Ant Design Pro是阿里巴巴旗下蚂蚁金服开源的中台前端/设计解决方案,官网. 一.下载安装 1.1 前序准备 你的本地环境需要安装 yarn.node 和 git.我们的技术栈基于 E ...

最新文章

  1. js如何判断一个对象是不是Array?
  2. Python爬虫! 单爬,批量爬,这都不是事!
  3. datatable数据类型方法
  4. oracle 触发器 merge,[OT]函数|过程|触发器|插入(insert)|修改(Merge)
  5. python风控工具_python-风控模型分析01
  6. Firefox必备的24款web开发插件[转]
  7. solr 6.4 mysql_solr6.4.1搜索引擎(2)首次同步mysql数据库
  8. Spring Boot 初体验(8)配置server信息
  9. PS把一张白纸里的黑色图形抠出来
  10. Java开发笔记(一百三十八)JavaFX的箱子
  11. 游戏公司2022秋招记录
  12. Spark SQL面试题
  13. WIN10教育版怎么可以变更为专业版
  14. 教你怎么用Mono Cecil - 动态注入 (注意代码的注释)
  15. 小程序开发-准备工作
  16. English Learning - L2 语音作业打卡 辅音舌齿龈音 [t] [d] Day24 2023.3.16 周四
  17. ElasticSearch(六)组合多查询(must, should, must_not, bool, filter)
  18. 吉首大学第八届“新星杯”题解AEGIJK
  19. 安装ubuntu或deepin报:failed to load ldlinux.c32的问题及解决步骤
  20. 网络问题“56”的解决

热门文章

  1. 第三周项目4:穷举法解决组合问题
  2. Python面向对象——面向对象介绍、实现面向对象编程、定义类、再调用类产生对象、总结__init__方法、查找顺序
  3. 深圳水上乐园有哪些 而且便宜还好玩
  4. 基于stm32f10x(原子)的电容触摸实验的个人解读 (16)
  5. 代写计算机ei,骗子 张爱荣 以代写代发EI期刊骗钱 钱收到后QQ不上,手机关机
  6. python基础 日常总结——列表(二)
  7. 计算机双工模式,100M 全双工、100M 半双工、10M全双工几种模式分别测试
  8. 【官方文档】Fluent Bit 1.8 官方文档
  9. 数组中重复的元素(剑指Offe.03)
  10. unity关于中文字体显示问题