【React】监听 sessionStorage / localStorage 更新

news/2024/7/15 18:33:43 标签: react.js, javascript, 前端

文章目录

  • 刚开始会下意识想到用 useEffect 的依赖数组直接监听 useState 变化,但是事实是不行的
useEffect(()=>{
    useData(localStorage.getItem('test_data'))
},[localStorage.getItem('test_data')])
  • 只能通过 js 原生去监听,但是要注意的是:

当存储区域在另一个文档的上下文中被修改时,会触发该接口storage的事件,但是:

  • 这不适用于进行更改的同一页面 !
    这实际上是域中其他页面使用存储同步所做的任何更改的一种方式。
    其他域上的页面无法访问相同的存储对象。
export default function () {
  const [state, setState] = useState('');
  const click = () => {
    localStorage.setItem('test_data', String(Math.random()));
  };
  useEffect(() => {
    console.log('sessionStorage = ', state);
  }, [state]);
  const getStorage = () => {
    const item = localStorage.getItem('test_data') ?? '';
    console.log('getItem = ', item);
    setState(item);
  };
  useEffect(() => {
    window.addEventListener('storage', getStorage);

    return () => {
      window.removeEventListener('storage', getStorage);
    };
  }, []);
  return (<button onClick={click()} >测试</button>)
}
  • 最后总结一下:还是老老实实的用store去存储然后进行监听吧。

http://www.niftyadmin.cn/n/1009518.html

相关文章

使用Matplotlib画三维图

使用matplotlib画3D图&#xff1a; import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D# 创建X和Y的网格点 x np.linspace(-5, 5, 100) y np.linspace(-5, 5, 100) X, Y np.meshgrid(x, y)# 创建Z的网格点&#xff08;这里使用一…

安装 Proxy SwitchyOmega 扩展

扩展安装地址&#xff1a;https://chrome.google.com/webstore/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgif 打开选项页面后&#xff0c;选择导入/导出&#xff0c;在在线恢复选项中填入以下地址并点击恢复 地址&#xff1a;https://storage.monocloud.co/p…

Pinia---Vue最新状态管理库

Pinia是Vue的专属的最新状态管理库&#xff0c;是Vuex状态管理工具的替代品 Pinia: Pinia | Pinia 1. 安装&#xff1a; npm install pinia 2. 创建一个 pinia 实例 (根 store) 并将其传递给应用 // main.js import ./assets/main.css import { createApp } from vue impor…

WEB界面测试

目录 前言&#xff1a; 摘要: WEB界面测试&#xff0c;最大的难度之一可能就是兼容性测试了 WEB界面测试&#xff0c;注重用户体验 WEB界面测试&#xff0c;注意用户的使用习惯 前言&#xff1a; Web界面测试是一种通过模拟用户与Web应用程序的交互来验证其功能和用户体验…

使用git管理matlab代码

matlab使用git管理代码 设置 Git 源代码管理 - MATLAB & Simulink - MathWorks 中国 在 R2020b 之前&#xff0c;必须安装命令行 Git 客户端&#xff0c;才能使用 Git 合并 MATLAB 中的分支。有关详细信息&#xff0c;请参阅安装命令行 Git 客户端。 1.在 Git 中注册二进…

pandas (十) 缺失值的处理:填充、删除、过滤、查询

Pandas使用函数处理缺失值 isnull和notnull&#xff1a;检测是否是空值&#xff0c;可用于df和seriesdropna&#xff1a;丢弃、删除余缺失值 axis: 删除行还是列&#xff0c;{0 or ‘index’, 1 or ‘columns’), default 0 how: 如果等于any则任何值为空都删除&#xff0c;如…

02_04实时调度类及SMP多核处理器的实时操作系统体系结构

上一篇文章说的是普通进程的调度但同时还有实时进程在linux上面进行运行 这边来看看实时进程在linux里面怎么调度 同时linux操作系统对实时任务的处理方式和设计思想 实时调度类 Linux进程分为两大类:实时进程和普通进程。 实时进程与普通进程根本不同之处&#xff0c;如果系…

华为发布5GigaGreen绿色创新实践,促进网络极致性能与绿色节能

[中国&#xff0c;上海&#xff0c;2023年6月28日] 在2023 MWC上海期间&#xff0c;华为举行产品与解决方案创新实践发布会&#xff0c;面向无线通讯领域发布5GigaGreen绿色创新实践&#xff0c;与全球运营商一起促进网络极致性能和绿色节能。华为无线产品线副总裁、首席营销官…