vite+react 使用 react-activation 实现缓存页面

对应的版本


"react": "^18.2.0",
"react-activation": "^0.12.4",
"react-dom": "^18.2.0",
"react-router-dom": "^6.15.0",

react-activation

这是一个npm包,在react keep alive中用的人数应该是最多的包.
这是GitHub地址react-activation

安装

yarn add react-activation
# 或者
npm install react-activation
# 或者
pnpm install react-activation 

   现在 main.tsx  入口文件中 使用 

import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";
import App from "./App.tsx";
import { AliveScope } from "react-activation";const { VITE_PROJECT_BASE } = import.meta.env;ReactDOM.createRoot(document.getElementById("root")!).render(<BrowserRouter basename={VITE_PROJECT_BASE}><AliveScope>  //  添加这个 AliveScope<App /></AliveScope></BrowserRouter>
);

  route.ts 路由文件中的使用

import { Outlet } from "react-router-dom";
import { RoutesTypes } from "@/types/routesType";
import { TableOutlined } from "@ant-design/icons";
import KeepAlive from "react-activation";  // 添加这个 包裹对应的组件
// id  是 用作 唯一标识的  name 的 是 后期 调用  react-activation 对应方法,去除,和刷新组件// 房间
import RoomList from "@/pages/RoomManagement/RoomList/index.tsx";// 公播
import PublicBroadcastingList from "@/pages/PublicBroadcastingManagement/PublicBroadcastingList/index.tsx";
import DefaultPublicBroadcasting from "@/pages/PublicBroadcastingManagement/DefaultPublicBroadcasting/index.tsx";// 设备
import DeviceList from "@/pages/DeviceManagement/DeviceList/index.tsx";
import DeviceConfiguration from "@/pages/DeviceManagement/DeviceConfiguration/index.tsx";const routes: RoutesTypes[] = [{sort: 1,path: "/layout/sass-platform",element: <Outlet />,meta: {title: "测试平台",},children: [{path: "/layout/sass-platform/room-management",element: <Outlet />,meta: {title: "房间管理",icon: TableOutlined,},children: [{path: "/layout/sass-platform/room-management/room-list",element: (<KeepAliveid="/layout/sass-platform/room-management/room-list"name="/layout/sass-platform/room-management/room-list"><RoomList /></KeepAlive>),meta: {title: "房间列表",icon: TableOutlined,},},],},{path: "/layout/sass-platform/public-broadcasting-management",element: <Outlet />,meta: {title: "公播管理",icon: TableOutlined,},children: [{path: "/layout/sass-platform/public-broadcasting-management/public-broadcasting-list",element: (<KeepAliveid="/layout/sass-platform/public-broadcasting-management/public-broadcasting-list"name="/layout/sass-platform/public-broadcasting-management/public-broadcasting-list"><PublicBroadcastingList /></KeepAlive>),meta: {title: "公播列表",icon: TableOutlined,},},{path: "/layout/sass-platform/public-broadcasting-management/default-public-broadcasting",element: (<KeepAliveid="/layout/sass-platform/public-broadcasting-management/default-public-broadcasting"name="/layout/sass-platform/public-broadcasting-management/default-public-broadcasting"><DefaultPublicBroadcasting /></KeepAlive>),meta: {title: "默认公播",icon: TableOutlined,},},],},{path: "/layout/sass-platform/device-management",element: <Outlet />,meta: {title: "设备管理",icon: TableOutlined,},children: [{path: "/layout/sass-platform/device-management/device-list",element: (<KeepAliveid="/layout/sass-platform/device-management/device-list"name="/layout/sass-platform/device-management/device-list"><DeviceList /></KeepAlive>),meta: {title: "设备列表",icon: TableOutlined,},},{path: "/layout/sass-platform/device-management/device-configuration",element: (<KeepAliveid="/layout/sass-platform/device-management/device-configuration"name="/layout/sass-platform/device-management/device-configuration"><DeviceConfiguration /></KeepAlive>),meta: {title: "设备配置",icon: TableOutlined,},},],},],},
];export default routes;

缓存的路由的不能懒加载

最后 路由的显示

Outlet 放置位置

文档:https://github.com/CJY0208/react-activation/blob/master/README_CN.md

手动控制缓存

使用 withAliveScope 或 useAliveController 获取控制函数

import KeepAlive, { withAliveScope, useAliveController } from 'react-activation'//hook 函数式组件
function app(){const { drop, dropScope, clear, getCachingNodes } = useAliveController()
}//class 类组件
@withAliveScope
class App extends Component {render() {const { drop, dropScope, clear, getCachingNodes } = this.props}
}
  • drop(name) 卸载缓存,不包括嵌套的KeepAlive
  • dropScope(name) 卸载缓存,包括嵌套的所有KeepAlive
  • refresh(name) 刷新缓存状态,不包括嵌套的KeepAlive
  • refreshScope(name) 刷新缓存状态,包括嵌套的所有KeepAlive
  • clear() 清空所有缓存
  • getCachingNodes() 获取所有缓存中的节点

KeepAlive属性 

属性名类型备注
whenBoolean、Array、Function

Boolean (true-卸载时缓存 false-卸载时不缓存)

Array (第 1 位参数表示是否需要在卸载时缓存

第 2 位参数表示是否卸载 <KeepAlive> 的所有缓存内容,包括 <KeepAlive> 中嵌的 <KeepAlive>

// 例如:以下表示卸载时不缓存,并卸载掉嵌套的所有 `<KeepAlive>`
<KeepAlive when={[false, true]}>...<KeepAlive>...<KeepAlive>...</KeepAlive>...</KeepAlive>...
</KeepAlive>

Function (返回值为上述 Boolean 或 Array)

saveScrollPosition

Boolean自动保存滚动位置(默认true)
namestring缓存标识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp H5 navigateBack无法返回上一层级

项目场景&#xff1a; 提交表单后需要返回上一级 原因分析&#xff1a; H5在PC端打开&#xff0c;当前页面重新加载的情况下&#xff0c;出现navigateBack不能返回&#xff0c;由于H5端页面刷新后返回页面栈会消失 //提交 const handleSubmit async () > {form.value?.a…

k8s集群换ip

1.把/etc/kubernetes/*.conf中所有的旧ip换成新ip cd /etc/kubernetes/ find . -type f | xargs sed -i "s/$oldip/$newip/"2.替换$HOME/.kube/config文件中的旧ip为新ip(注意sudo的话需要改root下的) cd $HOME/.kube/ find . -type f | xargs sed -i "s/$old…

想要精通算法和SQL的成长之路 - 受限条件下可到达节点的数目

想要精通算法和SQL的成长之路 - 受限条件下可到达节点的数目 前言一. 相交链表&#xff08;邻接图和DFS&#xff09; 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 相交链表&#xff08;邻接图和DFS&#xff09; 原题链接 public int reachableNodes(int n, int[][] ed…

《算法竞赛·快冲300题》每日一题:“点灯游戏”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 点…

【精品】商品规格 数据库表 设计

特点 同一类商品的规格项分组一样同一类商品的规格项一样不同商品的规格值是不同的 规格参数规格组规格项&#xff1a;规格值本博客对应的SQL文件下载地址&#xff1a;https://download.csdn.net/download/lianghecai52171314/88306884 方案一 数据库设计 查询17号商品的规…

flex布局实现 内容区域高度自适应

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; 一、背景说明 对于纵向排列布局&#xff0c;且上中下个个模块都是自动高度。当我们针对中间部分需要自适应高度且进行滚动时&#xff0c;那我们就可以用flex: 1 来处理。 二 、先看效果图 二 、flex布局 <!DO…

【C++】day3学习成果:类

1.自行封装一个栈的类&#xff0c;包含私有成员属性&#xff1a;栈的数组、记录栈顶的变量 成员函数完成&#xff1a;构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 头文件stack.h: #ifndef STACK_H #define STACK_H#include …

蓝蓝设计提供大屏信息软件UI设计服务

北京蓝蓝设计公司是一支由清华美院毕业的专业团队组成的设计公司。我们的设计师们在大屏科研信息软件UI设计领域拥有多年的工作经验和丰富的行业知识。我们对设计充满热爱&#xff0c;设计不仅是我们的专业和职业&#xff0c;更是我们的爱好。我们致力于为客户提供高质量、专业…

安装配置 zookeeper(单机版)

目录 一 准备并解压安装包 二 修改zoo.cfg文件 三 创建相应两个目录 四 创建文件myid 五 修改环境变量 六 启动 zookeeper 一 准备并解压安装包 这里提供了网盘资源 http://链接: https://pan.baidu.com/s/1BybwSQ_tQUL23OI6AWxwFw?pwdd4cf 提取码: d4cf 这里的安装包是…

线性代数的本质(五)——矩阵的运算

文章目录 矩阵的运算矩阵的转置方阵的运算初等矩阵分块矩阵逆矩阵矩阵的秩广义逆矩阵 矩阵的运算 矩阵的转置 转置&#xff1a;矩阵 A A A的行列互换得到的矩阵称为 A A A 的转置(transpose)&#xff0c;记作 A T A^T AT。 性质&#xff1a;矩阵转置运算满足下列性质&…

Mac 安装ZooKeeper+kafka基本使用

为什么 Kafka 依赖 ZooKeeper? 下面ZooKeeper基本介绍&#xff1a; 1、基本功能 ZooKeeper 为分布式系统提供了一种配置管理的服务&#xff1a;集中管理配置&#xff0c;即将全局配置信息保存在 ZooKeeper 服务中&#xff0c;方便进行修改和管理&#xff0c;省去了手动拷贝…

Django05_反向解析

Django05_反向解析 5.1 反向解析概述 随着功能的不断扩展&#xff0c;路由层的 url 发生变化&#xff0c;就需要去更改对应的视图层和模板层的 url&#xff0c;非常麻烦&#xff0c;不便维护。这个时候我们可以通过反向解析&#xff0c;将 url解析成对应的 试图函数 通过 path…

Python语言

这里写自定义目录标题 一、首先认识python一、python起源二、python的优缺点 二、python应用场景三、解释型语言与编译型语言四、安装python-3.5.4-amd64五、变量名的要求六、python简单的语句验证一、打开python交互式运行环境idle&#xff0c;在屏幕上打印python的第一个程序…

移动测试之语音识别功能如何测试?

移动测试之语音识别功能如何测试&#xff1f; 要知道语音识别功能如何测试&#xff0c;我们先了解智能产品语音交互流程&#xff1a; 所以&#xff0c;要进行测试的话&#xff0c;我们需要从以下几个维度来准备测试点&#xff1a; 基础功能测试&#xff1a; 1、声纹的录入&…

AWS Athena SQL基础知识

一、Athena SQL 基础学习🍜 1 获取一年的第几周 select Extract(week from date2022-12-11) as week_number Extract(week(Sunday) from date) as week_number2 Int to Date select date_parse(concat

SpringMVC之JSON返回异常处理机制

目录 一.JSON 1.1.介绍 1.2.SpringMVC之JSON数据返回 1.2.1.导入依赖 1.2.2.配置spring-mvc.xml 1.2.3.ResponseBody注解使用 1.2.4.常用注解 二.统一异常处理 2.1.为什么要全局异常处理 2.2.异常处理思路 2.2.异常处理方式一 2.3.异常处理方式二 2.4.异常处理方式三…

linux上搭建sftp服务器

文章目录 第一步&#xff1a;查看ssh版本第二步&#xff1a;添加sftp用户组第三步&#xff1a;创建sftp用户并设置密码第四步&#xff1a;设置活动目录第五步&#xff1a;配置chroot目录权限第六步&#xff1a;指定sftp组用户sftp_upload的home目录第七步&#xff1a;修改ssh配…

C语言中的类型转换有哪些方式?

C语言中的类型转换是将一个数据类型的值转换为另一个数据类型的值的过程。类型转换在编程中非常常见&#xff0c;因为它允许您在不损失数据的情况下在不同数据类型之间进行操作和赋值。在C语言中&#xff0c;类型转换有多种方式&#xff0c;包括隐式类型转换和显式类型转换。本…

【C++进阶】:红黑树

红黑树 一.红黑树简单实现1.性质二.更新颜色1.情况一2.情况二3.情况三 3.完整代码(代码有注释&#xff0c;稍微画图很容易理解,旋转部分可以看我的AVL树博客) 二.map和set1.基本实现2.迭代器 本篇的前置条件是AVL树的旋转和搜索树&#xff0c;如果不了解可以看看我的AVL树博客 …

mybatis—plus

接口和实现类都继承&#xff1a; 如果你让你的服务接口继承 IService&#xff0c;并让你的服务实现类继承 ServiceImpl&#xff0c;那么你的服务接口将明确地列出所有可用的 CRUD 方法。 只继承 ServiceImpl&#xff1a; 如果你只让你的服务实现类继承 ServiceImpl&#xff0c;…