javascript - 本地存储的更改未触发事件监听器

标签 javascript reactjs local-storage

我有 React 组件。最初我在 UseEffect 中设置了一些 localStorage。此外,我添加了事件监听器。单击文本后,它会更改 localStorage 值,但事件监听器没有触发,为什么?

import React, { useEffect } from "react";

export default function App() {

  useEffect(() => {
    window.localStorage.setItem("item 1", 'val 1');
    window.addEventListener('storage', () => {
      alert('localstorage changed!')
    })
  }, []);

  const getData = () => {
    localStorage.setItem("item", "val chamged");
  };

  return (
    <div className="App">
      <h1 onClick={getData}>Change localstorage value</h1>

    </div>
  );
}

https://codesandbox.io/s/naughty-engelbart-90tkw

最佳答案

有两件事是错误的。

  1. 更改onClick={getData()} onClick={getData}
  2. 来自文档(https://developer.mozilla.org/en-US/docs/Web/API/Window/storage_event)。 当存储区域(localStorage 或 sessionStorage)在另一个文档的上下文中被修改时,将触发 Window 接口(interface)的存储事件。 请注意最后一句,该事件不会在同一文档中触发。打开 https://codesandbox.io/s/spring-browser-89con 就可以看到在同一浏览器的 2 个选项卡中,警报将开始出现。

关于javascript - 本地存储的更改未触发事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61000058/

相关文章:

javascript - 将数据属性与超文本链接一起使用

javascript - $routeChangeSuccess : Not triggering on first load (but not throwing any error) 的奇怪行为

javascript - 动态设置 googleapi key

reactjs - 如何将 react-hook-form 用于嵌套数组

Javascript LocalStorage 作用域

javascript - 如何在没有 ctx.bezierCurveTo 的情况下使用原生 Javascript 代码绘制贝塞尔曲线?

javascript - 如何在 React 中设置每个组件的样式?

reactjs - redux-thunk:通过 store.dispatch() 调用操作时缺少属性 'type'

javascript - 如何将自定义样式规则保存到LocalStorage?

javascript - HTML 表单提交值并将所有值存储在一个新数组中(javascript)