react18中如何监听localstorage的变化获取最新的本地缓存

有时候业务中会需要监听缓存的变化,实时更新页面的内容获取发送接口请求。这就要我们来监听对localstorage的修改,实时响应变化!!一下方法同样实用于vue项目。

同一个项目中不同页面的实现

  • 实现效果
    请添加图片描述

  • 代码分析
    修改localstoare的页面,很简单直接使用自带的api实现

import { useEffect } from "react";
function LocalStorage() {
  function handleChangeName() {
    localStorage.setItem("name", "zhangsan" + Math.random());
  }
  return (
    <>
      <h1>Local Storage</h1>
      <button onClick={handleChangeName}>提交</button>
    </>
  );
}

export default LocalStorage;

监听修改的页面,监听storage即可。

function Ref() {
  useEffect(() => {
    window.addEventListener("storage", (e) => {
      console.log("storage", e);
    });
    return () => {};
  }, []);

  return (
    <>
      ....
    </>
  );
}

由于storage的限制,上面只能在不同的页面中进行监听修改,如果要在同一页面中监听,我们该怎么实现?

同一个项目中同一个页面的实现

  • 实现效果

请添加图片描述

  • 实现代码
    useEffect周期中,dispatchEvent来监听我们的自定义事件new CustomEvent
import { useEffect } from "react";

function LocalStorage() {
 useEffect(() => {
    // 模拟触发自定义的 StorageEvent
    window.addEventListener("localStorageChange", (e) => {
      console.log(e);
    });
    return () => {};
  }, []);
  // 模拟触发自定义的 StorageEvent
  const triggerCustomStorageEvent = () => {
    const key = "name";
    const value = "zhangsan" + Math.random();
    localStorage.setItem(key, value);
    const storageEvent = new CustomEvent("localStorageChange", {
      detail: { key, value },
    });
    window.dispatchEvent(storageEvent);
  };
  return (
    <>
      <h1>Local Storage</h1>
      <button onClick={triggerCustomStorageEvent}>自定义提交</button>
    </>
  );
}

export default LocalStorage;

总结

以上是比较常见的两种简单的方法,当然还有其他的实现,比如事件轮询,对localstorage进行封装拦截等等,都可以去尝试下,有空我再补充完善吧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「漏洞复现」英飞达医学影像存档与通信系统 WebUserLogin.asmx 信息泄露漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

Redis中String类型常见的应用场景

目录 一. 缓存功能什么是缓存?Redis的工作原理热点数据的过期策略是什么? 二. 计数功能三. 会话(session)共享Session会话是用来解决什么问题的使用Redis集中管理Session 一. 缓存功能 什么是缓存? 缓存是一种用于存储数据的计算机硬件或软件组件. 缓存核心功能是加快数据…

Android上的AES加密

基础算法说明 https://www.youtube.com/watch?vlnKPoWZnNNM 虽然这个视频讲的非常详细&#xff0c;但是涉及到具体底层算法&#xff0c;大致流程 1. 将数据转成HEX或者byte array 2.将数据分层一块块等大小的数据 3.将数据和key 进行一次混合&#xff0c;加密之后的输出&…

AI让企业知识管理与设计产出更智序

AI与各行各业的融合程度正在不断加深。 从医疗健康到金融服务&#xff0c;从教育到制造业&#xff0c;从零售到物流&#xff0c;AI的应用正在推动这些行业的转型升级&#xff0c;提高效率&#xff0c;降低成本&#xff0c;创造新的增长点。一家专注于显示制造的企业就遇到了这…

SpringBoot技术的车辆管理系统集成

3系统分析 3.1可行性分析 通过对本车辆管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本车辆管理系统采用Spring Boot框架&#xff0c;JAVA作为开发语…

破局汽车基础软件发展丨昂辉科技亮相2024芜湖新能源汽车零部件和后市场生态博览会

10月14—17日&#xff0c;2024芜湖新能源汽车零部件和后市场生态博览会在芜湖市宜居国际博览中心盛大开幕。昂辉科技携新一代EasySAR车载基础软件工具链产品亮相核心零部件展区。 作为新能源汽车行业的一次盛会&#xff0c;本届博览会以“会议论坛展区展示”为特色&#xff0c…

开源限流组件分析(一):juju/ratelimit

文章目录 前言数据结构对外提供接口初始化令牌桶获取令牌 核心方法adjustavailableTokenscurrentTicktakeTakeAvailableWait系列 前言 这篇文章分析下go开源限流组件juju-ratelimit的使用方式和源码实现细节 源码地址&#xff1a;https://github.com/juju/ratelimit 版本&…

非常漂亮html公告弹窗代码

非常漂亮html公告弹窗代码 <style>.act-user-modal[data-v-627ce64e] {width: 900px;height: 570px;position: fixed;left: 50%;top: 50%;z-index: 9000;background: url(https://pic1.zhimg.com/80/v2-39b2a0ea3f338776b81d760e67d56027.png)no-repeat 50%;margin: -285…

[已解决] pycharm添加本地conda虚拟环境 + 配置解释器 - pycharm找不到conda可执行文件

目录 问题&#xff1a; 方法&#xff1a; 补充&#xff1a;创建conda虚拟环境 参考文档&#xff1a;pycharm找不到conda可执行文件怎么办&#xff1f;-CSDN 问题&#xff1a; 1.显示&#xff1a;未为项目配置 Python 解释器 2.想在pycharm中使用本地创建的虚拟环境 方法&a…

关于MyBatis-Plus 提供Wrappers.lambdaQuery()的方法

实例&#xff1a; private LambdaQueryWrapper<XXX> buildQueryWrapper(XXXBo bo) { Map<String, Object> params bo.getParams(); LambdaQueryWrapper<XXX> lqw Wrappers.lambdaQuery(); lqw.eq(bo.getOrgId() ! null, XXX::getOrgId, bo.getOrgId()); lq…

搭建Elasticsearch集群

一. 集群的结构 1.单点的问题 单点的Elasticsearch存在哪些可能出现的问题呢? 单台机器存储容量有限,无法实现高存储。容易出现单点故障,无法实现高可用。单服务的并发处理能力有限,无法实现高并发所以,为了应对这些问题,我们需要对Elasticsearch搭建集群。 2.数据分片…

芯课堂 | 使用 SWM341 系列 MCU 环境配置

SWM341系列MCU调试环境配置 SWM341 是华芯微特的其中一款 MCU&#xff0c;341 和 341内置 SDRAM 的 34S 系列&#xff0c;其内核相同。 芯片使用安谋科技“星辰”STAR-MC1 内核,基于 Arm-V8 指令集架构&#xff0c;下载烧录选 M33&#xff0c;对应的工具需要升级; 1、使用 KE…

【踩坑随笔】Tensorflow-GPU训练踩坑

一个无语的坑&#xff0c;4060单卡训练&#xff0c;8G内存本来就不够&#xff0c;还没开始训练就已经爆内存了&#xff0c;但是居然正常跑完了训练&#xff0c;然后一推理发现结果就是一坨。。。往回翻日志才发现原来中间有异常。 首先解决第一个问题&#xff1a;Could not lo…

阴盘奇门月将查法排法以及php的实现的部分代码

vvvvv绿泡泡: lsk9479 月将查法&#xff0c;是根据二十四节气来查询的&#xff0c;查法表如下&#xff1a; ‌雨水至春分‌&#xff1a;月将为亥‌春分至谷雨‌&#xff1a;月将为戌‌谷雨至小满‌&#xff1a;月将为酉‌小满至夏至‌&#xff1a;月将为申‌夏至至大暑‌&am…

基于SpringBoot+Vue大学生创业就业智慧导航服务平台【提供源码+答辩PPT+参考文档+项目部署】

&#x1f4a5; 这两年毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的JavaWeb项目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff01; ❗如何解决这类问题&#xff1f; 让我们能够顺利通过毕业&#xff0c;我也一直在不断思考、努力、精进。通过2024年…

SVN——常见问题

基本操作 检出 提交 更新 显示日志 撤销本地修改 撤销已提交内容 恢复到指定版本 添加忽略 修改同一行 修改二进制文件

Science:成功申请适合自己的博士或博士后岗位的技巧

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 选择在哪里读博士&#xff0c;或进行博士后研究是一个人人生中具有决定性的选择。“选择大于努力”&#xff0c;不同的选择带来的人生体验和结果&#xff0c;可能天上地下。 …

【JavaEE】——四次挥手,TCP状态转换,滑动窗口,流量控制

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;断开连接的本质 二&#xff1a;四次挥手 1&#xff1a;FIN 2&#xff1a;过程梳理 …

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波 前言MPU6050寄存器代码详解mpu6050.cmpu6050.h 使用说明 前言 本篇文章基于卡尔曼滤波的原理详解与公式推导&#xff0c;来详细的解释下如何使用卡尔曼滤波来解算MPU6050的姿态 参考资料&#xff1a;Github_mpu6050 MPU6050寄存器…

【漏洞复现】SpringBlade menu/list SQL注入漏洞

》》》产品描述《《《 致远互联智能协同是一个信息窗口与工作界面,进行所有信息的分类组合和聚合推送呈现。通过面向角色化、业务化、多终端的多维信息空间设计,为不同组织提供协同门户,打破组织内信息壁垒,构建统一协同沟通的平台。 》》》漏洞描述《《《 致远互联 FE协作办公…