同标签实现监听LocalStorage

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

javascript 复制代码
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生命周期钩子 onMountedonUnmounted来监听和处理 LocalStorage 的变化

javascript 复制代码
<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>
相关推荐
芭拉拉小魔仙6 分钟前
企业级Vue项目的状态管理:从原理到实战架构
前端·vue.js·架构
恋猫de小郭9 分钟前
丰田正在使用 Flutter 开发游戏引擎 Fluorite
android·前端·flutter
扶苏10021 小时前
Vue 3 响应式原理深度解析
前端·javascript·vue.js
NEXT061 小时前
React 性能优化:图片懒加载
前端·react.js·面试
PineappleCoder1 小时前
别让字体拖了后腿:FOIT/FOUT 深度解析与字体加载优化全攻略
前端·性能优化
NEXT062 小时前
后端跑路了怎么办?前端工程师用 Mock.js 自救实录
前端·后端·程序员
装不满的克莱因瓶3 小时前
Java7新特性:try-with-resources写法
java·前端·javascript·jdk·新特性·jdk7
SailingCoder4 小时前
【 从“打补丁“到“换思路“ 】一次企业级 AI Agent 的架构拐点
大数据·前端·人工智能·面试·架构·agent
~央千澈~4 小时前
抖音弹幕游戏开发之第12集:添加冷却时间机制·优雅草云桧·卓伊凡
java·服务器·前端
CappuccinoRose5 小时前
CSS 语法学习文档(十三)
前端·css·学习·postcss·模块化·预处理器