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

同标签实现监听LocalStorage

使用 React 生命周期函数 useEffect来监听和处理 LocalStorage 的变化 

import React, { useEffect } from 'react';const LocalStorageListener = () => {useEffect(() => {// 注册监听器const handleStorageChange = (event) => {if (event.key === 'myKey') {console.log('注册监听器', event.newValue);}};// 添加监听器window.addEventListener('storage', handleStorageChange);// 触发监听器const triggerCustomStorageEvent = () => {const storageEvent = new StorageEvent('storage', {key: 'myKey',newValue: 'newValue',url: window.location.href,});window.dispatchEvent(storageEvent);};// 移除监听器return () => {window.removeEventListener('storage', handleStorageChange);};}, []); // 空数组表示在组件挂载时运行return (<div><button onClick={() => localStorage.setItem('myKey', 'newValue')}>修改 localStorage</button><button onClick={() => window.dispatchEvent(new StorageEvent('storage', {key: 'myKey',newValue: localStorage.getItem('myKey'),url: window.location.href,}))}>手动触发 StorageEvent</button></div>);
};export default LocalStorageListener;

使用Vue生命周期钩子 onMounted 和 onUnmounted来监听和处理 LocalStorage 的变化 

<template><div><button @click="updateLocalStorage">修改 localStorage</button><button @click="triggerCustomStorageEvent">手动触发 StorageEvent</button></div>
</template><script lang="ts" setup>
import { onMounted, onUnmounted } from 'vue';
// 注册监听器
const handleStorageChange = (event: StorageEvent) => {if (event.key === 'myKey') {console.log('Detected localStorage change:', event.newValue);}
};const updateLocalStorage = () => {localStorage.setItem('myKey', 'newValue');
};
// 触发监听器
const triggerCustomStorageEvent = () => {const storageEvent = new StorageEvent('storage', {key: 'myKey',newValue: 'newValue',url: window.location.href,});window.dispatchEvent(storageEvent);
};
// 添加监听器
onMounted(() => {window.addEventListener('storage', handleStorageChange);
});
// 移出监听器
onUnmounted(() => {window.removeEventListener('storage', handleStorageChange);
});
</script>

相关文章:

同标签实现监听LocalStorage

使用 React 生命周期函数 useEffect来监听和处理 LocalStorage 的变化 import React, { useEffect } from react;const LocalStorageListener () > {useEffect(() > {// 注册监听器const handleStorageChange (event) > {if (event.key myKey) {console.log(注册…...

JAVA高性能缓存项目

版本一 代码实现 import java.util.HashMap; import java.util.concurrent.TimeUnit;public class CacheExample01 {private final static HashMap<String, Integer> cache new HashMap<>();public static Integer check(String userId) throws InterruptedExce…...

智慧农业大数据平台:智汇田园,数驭未来

智慧农业大数据平台 计讯物联智慧农业大数据平台是一个集管理数字化、作业自动化、生产智能化、产品绿色化、环境信息化、服务现代化于一体的多功能监管系统。它通过与硬件产品的搭配使用&#xff0c;实现对农业生产全过程的实时监测、精准控制和科学管理。该平台集成了多个数…...

Go语言基础教程:可变参数函数

Go 语言允许函数接收可变数量的参数&#xff0c;这种特性对于处理数量不确定的参数特别有用。在本教程中&#xff0c;我们将通过示例代码讲解如何定义和使用 Go 的可变参数函数。 package mainimport "fmt"// 定义一个可变参数函数 sum&#xff0c;接收任意数量的整…...

高并发场景下解决并发数据不一致

简单的场景: 全量数据更新的情况下, 不在乎同一秒的请求都必须要成功, 只留下最新的更新请求数据 方案常用的是 1、数据库增加时间戳标识实现的乐观锁, 请求参数从源头带上微秒或者毫秒时间戳数据库存储, 然后在更新SQL语句上比较 (数据库的时间 < 参数传递的时间) 例如: A…...

OpenAI GPT-o1实现方案记录与梳理

本篇文章用于记录从各处收集到的o1复现方案的推测以及介绍 目录 Journey Learning - 上海交通大学NYUMBZUAIGAIRCore IdeaKey QuestionsKey TechnologiesTrainingInference A Tutorial on LLM Reasoning: Relevant methods behind ChatGPT o1 - UCL汪军教授Core Idea先导自回归…...

Excel:vba实现生成随机数

Sub 生成随机数字()Dim randomNumber As IntegerDim minValue As IntegerDim maxValue As Integer 设置随机数的范围(假入班级里面有43个学生&#xff0c;学号是从1→43)minValue 1maxValue 43 生成随机数(在1到43之间生成随机数)randomNumber Application.WorksheetFunctio…...

Python | Leetcode Python题解之第506题相对名次

题目&#xff1a; 题解&#xff1a; class Solution:desc ("Gold Medal", "Silver Medal", "Bronze Medal")def findRelativeRanks(self, score: List[int]) -> List[str]:ans [""] * len(score)arr sorted(enumerate(score), …...

安全见闻(6)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;安全见闻&#xff08;6&#xff09;_哔哩哔哩_bilibili 学无止境&#xff0c;开拓自己的眼界才能走的更远 本文主要讲解通讯协议涉及的安全问题。…...

Promise、async、await 、异步生成器的错误处理方案

1、Promise.all 的错误处理 Promise.all 方法接受一个 Promise 数组&#xff0c;并返回所有解析 Promise 的结果数组&#xff1a; const promise1 Promise.resolve("one"); const promise2 Promise.resolve("two");Promise.all([promise1, promise2]).…...

腾讯云:数智教育专场-学习笔记

15点13分2024年10月21日&#xff08;短短5天的时间&#xff0c;自己的成长速度更加惊人&#xff09;-开始进行“降本增效”学习模式&#xff0c;根据小米手环对于自己的行为模式分析&#xff08;不断地寻找数据之间的关联性&#xff09;&#xff0c;每天高效记忆时间&#xff0…...

Ovis: 多模态大语言模型的结构化嵌入对齐

论文题目&#xff1a;Ovis: Structural Embedding Alignment for Multimodal Large Language Model 论文地址&#xff1a;https://arxiv.org/pdf/2405.20797 github地址&#xff1a;https://github.com/AIDC-AI/Ovis/?tabreadme-ov-file 今天&#xff0c;我将分享一项重要的研…...

python的Django的render_to_string函数和render函数模板的使用

一、render_to_string render_to_string 是 Django 框架中的一个便捷函数&#xff0c;用于将模板渲染为字符串。 render_to_string(template_name.html, context, requestNone, usingNone) template_name.html&#xff1a;要渲染的模板文件的名称。context&#xff1a;传递给…...

基于Python大数据的王者荣耀战队数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

【Linux学习】(3)Linux的基本指令操作

前言 配置Xshell登录远程服务器Linux的基本指令——man、cp、mv、alias&which、cat&more&less、head&tail、date、cal、find、grep、zip&tar、bc、unameLinux常用热键 一、配置Xshell登录远程服务器 以前我们登录使用指令&#xff1a; ssh 用户名你的公网…...

Mac 使用脚本批量导入 Apple 歌曲

最近呢&#xff0c;买了一个 iPad&#xff0c;虽然家里笔记本台式都有&#xff0c;显示器都是 2个&#xff0c;比较方便看代码&#xff08;边打游戏边追剧&#xff09;。 但是在床上拿笔记本始终还是不方便&#xff0c;手机在家看还是小了点&#xff0c;自从有 iPad 之后&…...

全桥PFC电路及MATLAB仿真

一、PFC电路原理概述 PFC全称“Power Factor Correction”&#xff08;功率因数校正&#xff09;&#xff0c;PFC电路即能对功率因数进行校正&#xff0c;或者说是能提高功率因数的电路。是开关电源中很常见的电路。功率因数是用来描述电力系统中有功功率&#xff08;实际使用…...

【安当产品应用案例100集】025-确保数据安全传输——基于KMS与HSM的定期分发加密解决方案

引言&#xff1a; 在当今快速发展的数字化时代&#xff0c;企业面临着前所未有的信息安全挑战。尤其是在需要向供应商定期分发敏感数据的情况下&#xff0c;如何保证这些数据在传输过程中的安全性变得至关重要。为此&#xff0c;我们推出了结合安当KMS密钥管理平台与HSM密码机…...

十 缺陷检测解决策略之三:频域+空域

十 缺陷检测解决策略之三:频域空域 read_image (Image, 矩形) * 中间低频&#xff0c;四周高频 fft_image (Image, ImageFFT) * 中间低频&#xff0c;四周高频 fft_generic (Image, ImageFFT1, to_freq, -1, sqrt, dc_center, complex) * 中间高频&#xff0c;四周低频 rft_ge…...

有望第一次走出慢牛

A股已走完30多年历程。 大约每十年&#xff0c;会经历一轮牛熊周期。特点是每一轮周期&#xff0c;大约九成的时间都是熊市主导。就是我们常说的 快牛慢熊。 这一次&#xff0c;会不会重复历史? 历史不会简单重复。已经感受到了盘面的变化。 有人说&#xff0c;股市爆涨爆…...

5G O-RAN中AI驱动的延迟预测系统设计与优化

1. 项目背景与核心价值在5G O-RAN架构中&#xff0c;延迟控制一直是网络优化的核心痛点。传统电信设备厂商采用的黑盒方案&#xff0c;使得运营商难以针对特定场景进行精细化调优。而O-RAN的开放特性虽然带来了灵活性&#xff0c;但也引入了新的挑战——当CU&#xff08;集中单…...

基于Vue 3与UnoCSS构建轻量级个人导航页:从零部署到高级定制

1. 项目概述&#xff1a;一个轻量级、可定制的个人导航页 最近在折腾自己的浏览器主页&#xff0c;厌倦了那些臃肿、广告满天飞的默认页面&#xff0c;也受够了每次都要在书签栏里翻找常用链接。作为一个喜欢把一切工具都“私有化”和“个性化”的开发者&#xff0c;我决定自己…...

MCP密钥安全管理的无侵入解决方案:mcp-safe-run工具详解

1. 项目概述&#xff1a;告别硬编码&#xff0c;拥抱安全的MCP密钥管理如果你和我一样&#xff0c;日常开发中深度依赖Claude、Cursor、Windsurf这类智能编码助手&#xff0c;那你肯定对Model Context Protocol&#xff08;MCP&#xff09;不陌生。MCP作为连接AI模型与外部工具…...

保姆级避坑指南:用GGCNN源码处理Cornell抓取数据集,解决tiff文件生成失败问题

GGCNN源码实战&#xff1a;Cornell数据集预处理深度排错指南 第一次运行GGCNN的Cornell数据集预处理脚本时&#xff0c;我盯着毫无反应的终端窗口足足等了十分钟——没有进度条&#xff0c;没有错误提示&#xff0c;只有光标在无情地闪烁。这大概是每个复现论文的开发者都会经历…...

Avalonia AI助手插件:为.NET跨平台UI开发注入专家级智能

1. 项目概述&#xff1a;一个为Avalonia开发者量身定制的AI助手插件如果你正在使用Avalonia这个跨平台的.NET UI框架&#xff0c;并且同时也在探索如何利用像Claude、ChatGPT、GitHub Copilot这样的AI助手来提升开发效率&#xff0c;那么你很可能遇到过这样的困境&#xff1a;当…...

Nodejs后端服务如何稳定调用Claude并避免封号风险

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Nodejs后端服务如何稳定调用Claude并避免封号风险 1. 后端集成Claude的常见挑战 在Node.js后端服务中集成Claude模型&#xff0c;…...

VisualCppRedist AIO:一站式解决Windows应用程序运行库缺失难题

VisualCppRedist AIO&#xff1a;一站式解决Windows应用程序运行库缺失难题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 在Windows系统中&#xff0c;你是否经…...

收藏!小白程序员必备:2026年AI大模型就业新机遇与学习路线指南

根据世界经济论坛报告&#xff0c;到2030年科技、数据、AI等领域将创造1.7亿工作机会&#xff0c;同时淘汰9200万个岗位。AI市场规模预计到2034年达36804.7亿美元&#xff0c;年复合增长率19.20%。中国AI人才需求将远超供应。文章介绍了AI运营/AIGC内容创作者、算法工程师、大模…...

三维动画课程期末复盘:从零搭建我的马卡龙童话游乐场✨

当我按下 3ds Max 的渲染按钮&#xff0c;看着浅蓝的摩天轮缓缓转动、粉白的旋转木马跟着节奏起舞、淡紫色热气球轻轻飘动时&#xff0c;我才真正意识到&#xff1a;为期一学期的三维动画课程&#xff0c;就这样在我的指尖落下了帷幕。从刚打开软件连工具栏都认不全的 “小白”…...

书匠策AI课程论文一键生成?我替你们踩了一遍,真香预警!

各位论文困难户们&#xff0c;先别划走&#xff01; 今天不聊别的&#xff0c;就聊一个让我这个老博主都直呼"离谱"的东西——书匠策AI的课程论文功能。我知道你们一看到AI写论文就条件反射觉得是割韭菜&#xff0c;但这次&#xff0c;我是真的被圈粉了。 先说结论…...