React + Ant Design Pro项目实现keep-alive页签
背景
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页签相关推荐
- react ant design pro typescript springboot activiti权限、工作流框架
是什么? 使用springboot,activiti,mybatis,react,ant design pro,typescript 开发的后台管理系统(包含权限管理.工作流等功能),真正前后端分离的 ...
- React Ant design pro 访问服务器接口,获取数据显示
React Ant design pro 访问服务器接口 一.前两天更新了Ant design pro环境搭建,需要了解的小伙伴可以看一下之前的内容,还有react基础教程噢. 二.框架搭建完后,一般 ...
- Ant Design Pro项目启动报错 ChunkError mf-va_remoteEntry umi
版本: Ant Design Pro 5,typescript 背景: 有个项目写完,后期等待沟通,于是去做了其他项目.回头再来看这个项目时,无法启动,删除node_modules也无法启动. 解决办 ...
- Ant Design Pro模板无多标签页解决方案
白嫖了无尽岁月,我也来写个博客.希望能帮到你! 网上一些方案都是把官方模板替换成自己写的.本人的方案是在模板的基础上进行添砖加瓦,理解起来更容易! 解决思路是: 记录页面切换时的路由(onPageCh ...
- Ant Design Pro 项目图表组件点击事件
背景:使用框架配套图表组件charts 要求柱形图可实现点击事件 方法:onReady 官网:https://charts.ant.design/zh/docs/api/options/events ...
- 【Error】初始化ant design pro项目时遇到“pro 不是内部或外部命令”
解决办法: 将 pro create myapp 改为 npx pro create myapp 即可解决
- Linux部署Ant Design Pro项目及nginx部署
通过umi命令进行构建 通过umi命令进行构建,构建成功后悔生成静态页面: nginx部署 生成的静态页面需要通过nginx进行访问,并且请求数据的代理也需要通过nginx进行代理: ①安装nginx ...
- Ant Design Pro 开启默认进入登录页
src/utils/authority.js getAuthority方法中 return authority || ['admin']; 改为 return authority || ['guest ...
- Ant Design Pro V4下载运行
简介:Ant Design Pro是阿里巴巴旗下蚂蚁金服开源的中台前端/设计解决方案,官网. 一.下载安装 1.1 前序准备 你的本地环境需要安装 yarn.node 和 git.我们的技术栈基于 E ...
最新文章
- js如何判断一个对象是不是Array?
- Python爬虫! 单爬,批量爬,这都不是事!
- datatable数据类型方法
- oracle 触发器 merge,[OT]函数|过程|触发器|插入(insert)|修改(Merge)
- python风控工具_python-风控模型分析01
- Firefox必备的24款web开发插件[转]
- solr 6.4 mysql_solr6.4.1搜索引擎(2)首次同步mysql数据库
- Spring Boot 初体验(8)配置server信息
- PS把一张白纸里的黑色图形抠出来
- Java开发笔记(一百三十八)JavaFX的箱子
- 游戏公司2022秋招记录
- Spark SQL面试题
- WIN10教育版怎么可以变更为专业版
- 教你怎么用Mono Cecil - 动态注入 (注意代码的注释)
- 小程序开发-准备工作
- English Learning - L2 语音作业打卡 辅音舌齿龈音 [t] [d] Day24 2023.3.16 周四
- ElasticSearch(六)组合多查询(must, should, must_not, bool, filter)
- 吉首大学第八届“新星杯”题解AEGIJK
- 安装ubuntu或deepin报:failed to load ldlinux.c32的问题及解决步骤
- 网络问题“56”的解决
热门文章
- 第三周项目4:穷举法解决组合问题
- Python面向对象——面向对象介绍、实现面向对象编程、定义类、再调用类产生对象、总结__init__方法、查找顺序
- 深圳水上乐园有哪些 而且便宜还好玩
- 基于stm32f10x(原子)的电容触摸实验的个人解读 (16)
- 代写计算机ei,骗子 张爱荣 以代写代发EI期刊骗钱 钱收到后QQ不上,手机关机
- python基础 日常总结——列表(二)
- 计算机双工模式,100M 全双工、100M 半双工、10M全双工几种模式分别测试
- 【官方文档】Fluent Bit 1.8 官方文档
- 数组中重复的元素(剑指Offe.03)
- unity关于中文字体显示问题