位置: 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)(德国楚格峰一日游攻略)

  • 国家企业信用信息公示系统怎么查询公示信息?

    国家企业信用信息公示系统怎么查询公示信息?

  • 2021双十一iphone13会降价吗(2021双十一iphone13pro活动)

    2021双十一iphone13会降价吗(2021双十一iphone13pro活动)

  • 怎样经营微信营销才能消除消费者被压迫感觉(微信经营四步走)

    怎样经营微信营销才能消除消费者被压迫感觉(微信经营四步走)

  • 荣耀x20怎么关闭按键音(荣耀x20怎么关闭自动更新系统)

    荣耀x20怎么关闭按键音(荣耀x20怎么关闭自动更新系统)

  • 微信公众号预约核酸检测怎么取消(微信公众号预约的门票在哪里看)

    微信公众号预约核酸检测怎么取消(微信公众号预约的门票在哪里看)

  • 成都双流代理记账免费申报_零申报_代理记一个月多少钱(双流代办公司)

    成都双流代理记账免费申报_零申报_代理记一个月多少钱(双流代办公司)

  • 哈啰出行字体怎么调大(哈啰出行界面)

    哈啰出行字体怎么调大(哈啰出行界面)

  • 拍的抖音视频保存到相册的方法是什么(拍的抖音视频保存不下来怎么办)

    拍的抖音视频保存到相册的方法是什么(拍的抖音视频保存不下来怎么办)

  • 先删除再拉黑和先拉黑再删除的区别(先删除再拉黑和先拉黑再删除哪个狠)

    先删除再拉黑和先拉黑再删除的区别(先删除再拉黑和先拉黑再删除哪个狠)

  • 咸鱼看得出是谁举报的嘛(闲鱼可以知道谁看了我的主页了吗)

    咸鱼看得出是谁举报的嘛(闲鱼可以知道谁看了我的主页了吗)

  • 微信换了实名二维码要换吗(微信换了实名认证还能支付吗)

    微信换了实名二维码要换吗(微信换了实名认证还能支付吗)

  • 抖音在线状态是什么意思(抖音在线状态是绿点代表什么意思啊)

    抖音在线状态是什么意思(抖音在线状态是绿点代表什么意思啊)

  • 手机拍不了照片黑屏(手机拍不了照片扫不了二维码)

    手机拍不了照片黑屏(手机拍不了照片扫不了二维码)

  • 电话卡会自动注销吗(电话卡会自动注销吗?)

    电话卡会自动注销吗(电话卡会自动注销吗?)

  • 抖音的地区是到哪里就显示哪里的吗(抖音显示地区)

    抖音的地区是到哪里就显示哪里的吗(抖音显示地区)

  • id设计是什么意思(id设计方案)

    id设计是什么意思(id设计方案)

  • vue怎么加字幕(vue自动生成字幕)

    vue怎么加字幕(vue自动生成字幕)

  • ios13app更新在哪(iphone13更新软件在哪)

    ios13app更新在哪(iphone13更新软件在哪)

  • 怎么将pdf拆开(如何将pdf的文档拆开)

    怎么将pdf拆开(如何将pdf的文档拆开)

  • 爱疯手机是啥意思(爱疯手机是苹果手机吗)

    爱疯手机是啥意思(爱疯手机是苹果手机吗)

  • 腾讯云阻断怎么关闭(腾讯云拦截)

    腾讯云阻断怎么关闭(腾讯云拦截)

  • 抖音作品与动态的区别(抖音作品动态壁纸是什么意思)

    抖音作品与动态的区别(抖音作品动态壁纸是什么意思)

  • 一加7pro是哪个国家的(一加7pro是哪个品牌)

    一加7pro是哪个国家的(一加7pro是哪个品牌)

  • cad格式刷快捷键(中望cad格式刷快捷键)

    cad格式刷快捷键(中望cad格式刷快捷键)

  • win10专业版+企业版激活码分享 附激活工具(win10 专业版 企业版)

    win10专业版+企业版激活码分享 附激活工具(win10 专业版 企业版)

  • 小规模纳税人没有税控盘怎么报税
  • 小规模纳税人批发机动车
  • 买手机手续费怎么算
  • 坏账准备计提比率计算公式
  • 坏账准备计入营业收入如何报年报
  • 农产品加工需要交税吗
  • 汇算清缴补缴纳企业所得税会计分录
  • 小规模能开劳务费吗
  • 企业合并固定资产增值的规定
  • 买入返售金融资产什么意思
  • 电子承兑汇票如何贴现网银操作
  • 营业外收入期末结转
  • 营改增后还有营业费用吗
  • 人力资源公司劳务派遣怎么收费
  • 临时存款账户包括保证金账户
  • 建筑安装企业成本费用包括哪些
  • 所得税相关分录
  • 其他综合收益是利润表项目吗
  • 印花税税目错了能申报更正吗
  • 怎么开个体工商户
  • 普票冲红需要收回全部联次吗
  • 汇算清缴已退税的还可以作废吗
  • 计提工资大于实发工资
  • 增值税发票为什么要勾选认证
  • mac 双系统如何调整系统空间
  • 苹果电脑mac设备在哪里
  • 开发间接费用定义
  • centos编辑文本
  • 成立公司必要性
  • 什么时候使用多进程
  • 如何使专业人员的工作卓有成效读后感悟
  • 增值税专用发票上注明的价款含税吗
  • php锁定文本
  • php代码报错
  • 企业自查补税怎么报税
  • 小规模纳税人广告费是什么票据类型的
  • 房产契税滞纳金如何减免
  • php字符串的三种定义方式
  • js删除对象的方法
  • json与对象的区别
  • 点云入门
  • redux入门教程
  • python单子
  • lstm输出多个预测值
  • 微擎框架可以干什么
  • 电脑学word下哪个软件视频
  • 应收代垫款
  • phpcms插件
  • 固定收益票据
  • win7安装软件时提示不能打开要写入的文件
  • 资产负债表编制
  • 独资合伙公司
  • 机械设备预付款比例
  • 冲减应收账款该怎么处理
  • 多交个税收到退回怎么办
  • 企业在建工程领用自产应税消费品成本为10000元
  • 施工总包能分包土方吗
  • 企业购买原材料属于什么活动
  • 用友t3财务通普及版如何开下年账
  • 增值税稽查补交税会计处理
  • SQL2005、SQL2008允许远程连接的配置说明(附配置图)
  • sql不重复数据个数
  • win1909版本
  • 服务器系统2003
  • freebsd安装教程
  • macos安装pip
  • notify.exe - notify是什么进程 有什么用
  • linux新手教学
  • Linux系统中如何复制虚拟机
  • 如何显示文件后缀名
  • javascript中函数
  • 一键清除照片上多余的人
  • Python Flask-web表单使用详解
  • threejs入门教程
  • unity接收数据
  • div-d和div-i
  • python中json的用法
  • 销售黄金的基本知识
  • 智云发票集中管理云平台官网
  • 湖南兴广地税务师事务所有限公司(兴广集团有限公司)
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设