当前位置: 首页 > news >正文

umi4 项目使用 keepalive 缓存页面(umi-plugin-keep-alive、react-activation)

umi4使用keepalive

配置文件config\config.ts

export default defineConfig({plugins: ['umi-plugin-keep-alive'],
});

安装add umi-plugin-keep-alive

yarn add umi-plugin-keep-alive

页面 A

import { KeepAlive, history, useAliveController } from '@umijs/max';
const PageA = () => {const [count, setCount] = useState(0);const { drop } = useAliveController();return (<div><p>{count}</p><buttononClick={() => {// 跳转前先清除缓存drop('details').then(() => {history.push('/info-details');});}}>点击进入详情页</button></div>);
};export default () => (<KeepAlive name="page-A"><PageA /></KeepAlive>
);

页面 B

import { KeepAlive, history, useAliveController } from '@umijs/max';
const PageB = () => {const [count, setCount] = useState(0);const { drop } = useAliveController();return (<div><p>{count}</p> <buttononClick={() => {// 跳转前先清除缓存drop('details').then(() => {history.push('/info-details');});}}>点击进入详情页</button></div>);
};export default () => (<KeepAlive name="page-b"><PageB /></KeepAlive>
);

详情页

import { KeepAlive } from '@umijs/max';
const Details= () => {const [count, setCount] = useState(0);return <div>{count}</div>;
};export default () => (<KeepAlive name="details"><Details/></KeepAlive>
);

在这里插入图片描述

官网链接:https://github.com/CJY0208/react-activation/blob/master/README_CN.md

使用 withAliveScope 或 useAliveController 获取控制函数

  • drop(name): ("卸载"仅可用于缓存状态下的节点,如果节点没有被缓存但需要清空缓存状态,请使用 “刷新” 控制)

按 name 卸载缓存状态下的 节点,name 可选类型为 String 或 RegExp,注意,仅卸载命中 的第一层内容,不会卸载 中嵌套的、未命中的

  • dropScope(name): ("卸载"仅可用于缓存状态下的节点,如果节点没有被缓存但需要清空缓存状态,请使用 “刷新” 控制)

按 name 卸载缓存状态下的 节点,name 可选类型为 String 或 RegExp,将卸载命中 的所有内容,包括 中嵌套的所有

  • refresh(name):

按 name 刷新缓存状态下的 节点,name 可选类型为 String 或 RegExp,注意,仅刷新命中 的第一层内容,不会刷新 中嵌套的、未命中的

  • refreshScope(name):

按 name 刷新缓存状态下的 节点,name 可选类型为 String 或 RegExp,将刷新命中 的所有内容,包括 中嵌套的所有

  • clear():

将清空所有缓存中的 KeepAlive

  • getCachingNodes():

获取所有缓存中的节点

自动缓存

给需要控制缓存的 标签增加 when 属性,取值如下

当 when 类型为 Boolean 时
  • true: 卸载时缓存
  • false: 卸载时不缓存
<KeepAlive when={true}>
当 when 类型为 Array 时
  • 第 1 位参数表示是否需要在卸载时缓存
  • 第 2 位参数表示是否卸载 的所有缓存内容,包括 中嵌套的所有
<KeepAlive when={[false, true]}>
当 when 类型为 Function 时(建议使用这种方式)

返回值为上述 Boolean 或 Array,依照上述说明生效

但 when 的最终计算时机调整到 组件 componentWillUnmount 时,可避免大部分 when 属性没有达到预期效果的问题

<KeepAlive when={() => true}>
<KeepAlive when={() => [false, true]}>

相关文章:

  • 力扣hot100:560.和为K的子数组(前缀和+哈希表)
  • 基于Mindspore,通过Resnet50迁移学习实现猫十二分类
  • 【C++】类的默认成员函数(上)
  • 【S32DS报错】-8-调用初始化函数Port_Init后,S32DS断开与调试器PEmicro/J-Link的连接,无法调试Debug(基于MCAL)
  • 【conda】实现conda环境迁移的4种方式
  • 数字孪生10个技术栈:数据采集的八种方式
  • CL/opencl.h: No such file or directory(CentOS8 QT5.12.12)
  • Spring容器的启动流程
  • 如何在Word里一次性给全部汉字加拼音?
  • 艺术与科技的结合,AI绘画图生图怎么样?
  • 【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 4
  • JavaWeb环境配置 IDE2022版
  • nginx作为tcp的负载均衡
  • 从mysql 数据库表导入数据到elasticSearch的几种方式
  • [动态规划][蓝桥杯 2022 省 B] 李白打酒加强版 -- 代码注释含详解
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【RocksDB】TransactionDB源码分析
  • exif信息对照
  • Flannel解读
  • Git学习与使用心得(1)—— 初始化
  • Next.js之基础概念(二)
  • php面试题 汇集2
  • React 快速上手 - 07 前端路由 react-router
  • Sass Day-01
  • vue.js框架原理浅析
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 从零开始在ubuntu上搭建node开发环境
  • 聊聊flink的BlobWriter
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 使用 QuickBI 搭建酷炫可视化分析
  • 通信类
  • 携程小程序初体验
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 移动端解决方案学习记录
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #预处理和函数的对比以及条件编译
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (4)logging(日志模块)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C语言)fread与fwrite详解
  • (Git) gitignore基础使用
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (学习日记)2024.02.29:UCOSIII第二节
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)程序员疫苗:代码注入
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net Signalr 使用笔记
  • .Net多线程总结