位置: IT常识 - 正文

React中实现keepalive组件缓存效果(react keepalive)

编辑:rootadmin
React中实现keepalive组件缓存效果

推荐整理分享React中实现keepalive组件缓存效果(react keepalive),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react-keep-alive,react keep-alive,react keycloak,react-keep-alive,react keeplive,react-keep-alive,react keep,react keep,内容如对您有帮助,希望把文章链接给更多的朋友!

背景:由于react官方并没有提供缓存组件相关的api(类似vue中的keepalive),在某些场景,会使得页面交互性变的很差,比如在有搜索条件的表格页面,点击某一条数据跳转到详情页面,再返回表格页面,会重新请求数据,搜索条件也将清空,用户得重新输入搜索条件,再次请求数据,大大降低办公效率,如图:

目标:封装keepalive缓存组件,实现组件的缓存,并暴露相关方法,可以手动清除缓存。

React中实现keepalive组件缓存效果(react keepalive)

版本:React 17,react-router-dom 5

结构:

代码:

cache-types.js

// 缓存状态export const CREATE = 'CREATE'; // 创建export const CREATED = 'CREATED'; // 创建成功export const ACTIVE = 'ACTIVE'; // 激活export const DESTROY = 'DESTROY'; // 销毁

 CacheContext.js

import React from 'react';const CacheContext = React.createContext();export default CacheContext;

cacheReducer.js

import * as cacheTypes from "./cache-types";function cacheReducer(cacheStates = {}, { type, payload }) { switch (type) { case cacheTypes.CREATE: return { ...cacheStates, [payload.cacheId]: { scrolls: {}, // 缓存滚动条,key: dom, value: scrollTop cacheId: payload.cacheId, // 缓存Id element: payload.element, // 需要渲染的虚拟DOM doms: undefined, // 当前的虚拟dom所对应的真实dom status: cacheTypes.CREATE,// 缓存状态 }, }; case cacheTypes.CREATED: return { ...cacheStates, [payload.cacheId]: { ...cacheStates[payload.cacheId], doms: payload.doms, status: cacheTypes.CREATED, }, }; case cacheTypes.ACTIVE: return { ...cacheStates, [payload.cacheId]: { ...cacheStates[payload.cacheId], status: cacheTypes.ACTIVE, }, }; case cacheTypes.DESTROY: return { ...cacheStates, [payload.cacheId]: { ...cacheStates[payload.cacheId], status: cacheTypes.DESTROY, }, }; default: return cacheStates; }}export default cacheReducer;

KeepAliveProvider.js

import React, { useReducer, useCallback } from "react";import CacheContext from "./CacheContext";import cacheReducer from "./cacheReducer";import * as cacheTypes from "./cache-types";function KeepAliveProvider(props) { let [cacheStates, dispatch] = useReducer(cacheReducer, {}); const mount = useCallback( ({ cacheId, element }) => { // 挂载元素方法,提供子组件调用挂载元素 if (cacheStates[cacheId]) { let cacheState = cacheStates[cacheId]; if (cacheState.status === cacheTypes.DESTROY) { let doms = cacheState.doms; doms.forEach((dom) => dom.parentNode.removeChild(dom)); dispatch({ type: cacheTypes.CREATE, payload: { cacheId, element } }); // 创建缓存 } } else { dispatch({ type: cacheTypes.CREATE, payload: { cacheId, element } }); // 创建缓存 } }, [cacheStates] ); let handleScroll = useCallback( // 缓存滚动条 (cacheId, { target }) => { if (cacheStates[cacheId]) { let scrolls = cacheStates[cacheId].scrolls; scrolls[target] = target.scrollTop; } }, [cacheStates] ); return ( <CacheContext.Provider value={{ mount, cacheStates, dispatch, handleScroll }} > {props.children} {/* cacheStates维护所有缓存信息, dispatch派发修改缓存状态*/} {Object.values(cacheStates) .filter((cacheState) => cacheState.status !== cacheTypes.DESTROY) .map(({ cacheId, element }) => ( <div id={`cache_${cacheId}`} key={cacheId} // 原生div中
本文链接地址:https://www.jiuchutong.com/zhishi/293062.html 转载请保留说明!

上一篇:训练自己的GPT2模型(中文),踩坑与经验(训练自己的GPT模型 中文改英文)

下一篇:楚格峰山顶的缆车站,德国格赖瑙市 (© Robert Jank/Alamy)(德国楚格峰一日游攻略)

  • 十个营销中常见的用户心理效应(2)(十个营销中常见的渠道)

    十个营销中常见的用户心理效应(2)(十个营销中常见的渠道)

  • iphone精选照片怎么换(iphone精选照片怎么固定)

    iphone精选照片怎么换(iphone精选照片怎么固定)

  • miui12底部横线如何去掉(miui12底端横线)

    miui12底部横线如何去掉(miui12底端横线)

  • 离线请留言突然变离线(离线请留言突然变成2g在线)

    离线请留言突然变离线(离线请留言突然变成2g在线)

  • qq怎么开双封(qq 双封)

    qq怎么开双封(qq 双封)

  • 华为p40闪存规格(华为p40闪存规格参数)

    华为p40闪存规格(华为p40闪存规格参数)

  • 系统还原需要多长时间(系统还原需要多久?)

    系统还原需要多长时间(系统还原需要多久?)

  • icloud关了照片全没了怎么回事(icloud关了照片全没了能恢复)

    icloud关了照片全没了怎么回事(icloud关了照片全没了能恢复)

  • 荣耀30pro充电热怎么回事(为什么荣耀30充电发烫)

    荣耀30pro充电热怎么回事(为什么荣耀30充电发烫)

  • qq情侣空间有什么用处(QQ情侣空间有什么内容)

    qq情侣空间有什么用处(QQ情侣空间有什么内容)

  • 平板充满电可以用多久(平板充满电可以长期充吗)

    平板充满电可以用多久(平板充满电可以长期充吗)

  • rockchip是什么设备(rockchip rga)

    rockchip是什么设备(rockchip rga)

  • 苹果11怎么锁定屏幕不旋转(苹果11怎么锁定曝光)

    苹果11怎么锁定屏幕不旋转(苹果11怎么锁定曝光)

  • 华为手机自带浏览器在哪里(华为手机自带浏览器打开有广告)

    华为手机自带浏览器在哪里(华为手机自带浏览器打开有广告)

  • 华为mate30pro贴什么膜(华为mate30pro贴什么手机膜好)

    华为mate30pro贴什么膜(华为mate30pro贴什么手机膜好)

  • 手机摇一摇怎么用(手机摇一摇怎么收不到打招呼的)

    手机摇一摇怎么用(手机摇一摇怎么收不到打招呼的)

  • 苹果max怎么放第二张卡(苹果max第二个卡槽在哪)

    苹果max怎么放第二张卡(苹果max第二个卡槽在哪)

  • 苹果7怎么录屏(苹果7怎么录屏功能怎么使用)

    苹果7怎么录屏(苹果7怎么录屏功能怎么使用)

  • 华为抬头唤醒在哪里(华为抬头唤醒怎么设置)

    华为抬头唤醒在哪里(华为抬头唤醒怎么设置)

  • 喜马拉雅怎么退订不了(喜马拉雅怎么退订)

    喜马拉雅怎么退订不了(喜马拉雅怎么退订)

  • 微信草稿能保存多久(微信草稿箱保存后在哪里找)

    微信草稿能保存多久(微信草稿箱保存后在哪里找)

  • 小米手机怎么截屏(小米手机怎么截长屏)

    小米手机怎么截屏(小米手机怎么截长屏)

  • 如何查找添加打印机(如何查找我添加的好友)

    如何查找添加打印机(如何查找我添加的好友)

  • 小影记怎么添加音乐(小影记相册制作下载)

    小影记怎么添加音乐(小影记相册制作下载)

  • 美易怎么取消自动订阅(美易怎样取消自动续费)

    美易怎么取消自动订阅(美易怎样取消自动续费)

  • 爱奇艺字幕怎么关闭(爱奇艺字幕怎么消除)

    爱奇艺字幕怎么关闭(爱奇艺字幕怎么消除)

  • 300系列主板有哪些(300系列主板支持哪些cpu)

    300系列主板有哪些(300系列主板支持哪些cpu)

  • 酷我如何设置音效(酷我音乐如何设置音效)

    酷我如何设置音效(酷我音乐如何设置音效)

  • p30设置24小时(华为p30怎么设置24小时制)

    p30设置24小时(华为p30怎么设置24小时制)

  • 网络证书失效怎么处理(网络证书有问题怎么办)

    网络证书失效怎么处理(网络证书有问题怎么办)

  • fpxpress.exe是什么进程 有什么作用 fpxpress进程查询(fpx是什么文件)

    fpxpress.exe是什么进程 有什么作用 fpxpress进程查询(fpx是什么文件)

  • 缴纳增值税影响损益吗
  • 进出口税则是什么意思
  • 股权转让和变更法人一样吗?
  • 两个公司如何一起经营
  • 会计科目累计摊销是什么意思
  • 小规模30万免税是含税还是不含税
  • 外贸企业出口退税账务处理
  • 退土增税后账务处理
  • 企业哪些做法违背了营销道德
  • 房租合同印花税计算方法
  • 对公账户打钱给私人账户,谁交税呢
  • 地方教育费附加是什么意思
  • 土地增值税计算题及答案解析
  • 所得税调增调减项目
  • 存货成本包括哪些项目
  • 本年利润期末
  • 有留抵怎么交增值税
  • 企业所得税增值税完税证明
  • 派遣员工发生工伤这钱谁出
  • 一般纳税人销售自己使用过的汽车
  • vue项目如何搭建
  • 设备安装用工程造价吗
  • 城建税的会计账务处理
  • 累计计税折旧如何调整
  • SchSvr.exe - SchSvr是什么进程 有什么作用
  • 家庭承包发包方的权利和义务
  • mplugin.exe是什么
  • fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
  • 计提坏账准备的方法有哪些
  • php找出字符串中出现最多的字母
  • 怎么用html做一个收藏夹
  • 以前年度损益在报表哪里体现
  • windows安装php运行环境
  • 数据挖掘快速入门
  • 对外长期投资会计分录?
  • 公司名下商品房过户给公司需要交过户费
  • 去年发生了什么
  • 绩效是否需要交税
  • 关联企业借款费用
  • 发票开具就能做账了吗?
  • 小微企业的认定标准企业所得税
  • 新销售收入的确认条件
  • 减免的企业所得税是否需要征税 税屋
  • 质保金 销售费用
  • 无票收入的增值税税率
  • 车辆抵押贷款怎么办理
  • 电子发票能否作废
  • 怎么调整应收账款分录
  • 连续三个月发烧怎么回事
  • 股东是否实缴出资的举证责任
  • 计提税金及附加的金额如何算
  • 消防设备的安装
  • 公司收到美元怎么交税啊
  • linux系统中的输入输出分为三类
  • mac中的快捷键大全
  • win10假死的原因
  • 电脑开机后显示xp界面后一直是黑屏状态
  • centos 6.5网络设置
  • centos6.5桌面版安装教程
  • windows怎么更改网络状态
  • linux php教程
  • myfastupdate.exe - myfastupdate是什么进程文件 有什么用
  • windows8.1的设置在哪
  • 延长药品使用时间的方法
  • win10怎么打开ie浏览器的兼容模式
  • bootstrap页面代码
  • perl常用模块
  • linux命令及含义
  • js中的$是什么意思
  • nodejs基础知识
  • python任务调度之schedule
  • awk范围筛选
  • android FileNotFoundException(Is a Directory)解决办法
  • jquery search
  • 税务公众电话
  • 广东高速费用支付宝支付如何开发票
  • 广州市地税局领导名单
  • 如何理解改革创新是时代要求
  • 外汇业务税务备案
  • 土地增值税扣除项目金额怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设