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

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进行封装拦截等等,都可以去尝试下,有空我再补充完善吧。


http://www.kler.cn/a/354111.html

相关文章:

  • 使用Grafana中按钮插件实现收发HTTP请求
  • 实现点击表格中的邀请码并复制到剪贴板的功能
  • 编译openssl遇到错误Parse errors: No plan found in TAP output的解决方法
  • PDF书籍《手写调用链监控APM系统-Java版》第7章 插件与链路的结合:Tomcat插件实现
  • linux 常用 Linux 命令指南
  • Dots 常用操作
  • 使用虚拟机能干什么?
  • ZBrush和3D-Coat各自的优缺点是什么?
  • React 前端框架:强大的构建用户界面工具
  • 数学考研错题本:查漏补缺,高效提升备考策略
  • 前端_005_Nodejs
  • AUTOSAR_EXP_ARAComAPI的5章笔记(14)
  • openrtp 音视频时间戳问题
  • sankey.top - 桑基图/桑吉图/流程图/能量流/物料流/能量分析
  • 编写Python 自动化安装openGauss 数据库方法和代码 (1)
  • Flink状态一致性保证
  • Ansible概述
  • 滚雪球学Redis[6.3讲]:Redis分布式锁的实战指南:从基础到Redlock算法
  • Applied Spatial Statistics(九)GWR示例
  • ip地址的配置
  • 最新仿蓝奏网盘系统源码 附教程
  • MyBatis Plus
  • 遗传算法与深度学习实战(18)——使用网格搜索自动超参数优化
  • 吴恩达深度学习笔记(4)---加速神经网络训练速度的优化算法
  • 【Python爬虫实战】正则:从基础字符匹配到复杂文本处理的全面指南
  • 2023-06 GESP C++三级试卷