当 React.js 中的 localStorage 发生任何变化时,如何立即更新状态

jes*_*ica 4 javascript local-storage reactjs next.js

localStorage myCart数组发生任何变化时,如何立即更新购物车页面数据?下面是我的代码

const [cart, setCart] = React.useState([])

React.useEffect(() => {
    setCart(JSON.parse(localStorage.getItem('myCart')) || [])
}, [])
Run Code Online (Sandbox Code Playgroud)

cart被更新时,页面重新加载,但不是在新项目中添加或更新任何现有的项目!

我怎样才能做到这一点,cart如果对“localStorage”进行任何更改,它会立即更新?

提前致谢。

Shu*_*ubh 8

您可以向事件添加事件侦听器localstorage

React.useEffect(() => {
    
window.addEventListener('storage', () => {
  // When local storage changes, dump the list to
  // the console.
   setCart(JSON.parse(localStorage.getItem('myCart')) || [])   
});

   
}, [])
Run Code Online (Sandbox Code Playgroud)

Window 接口的 storage 事件在存储区域(localStorage)被修改时触发。 storage 事件仅在非自身的窗口进行更改时触发。

.

  • 我认为这还有更多内容。处理程序不是仅在不同窗口更新 localStorage 时调用吗?/sf/answers/479231091/ (4认同)
  • 请再次阅读 mozilla 链接 - 注意:`这在进行更改的同一页面上不起作用 — 这实际上是域上其他页面使用存储同步所做的任何更改的一种方式。其他域上的页面无法访问相同的存储对象。`@mnagdev (3认同)