我有一个单页的应用程序,我需要对本地存储的每一个变化作出React,它看起来像:
MyComponent {
someFuncWhichIsCalledEveryTimeWhenLocalStorageChanges() {
console.log('local storage changed!');
}
funcThatChangesLocalStorage() {
localstorage.setItem('key',val);
localstorage.getItem('key')
}
}
我尝试使用本地存储事件:
window.addEventListener('storage', function(event){
...
});
但那不起作用...所以我考虑使用Observable<>
,只是不知道如何正确地实现它。
7条答案
按热度按时间mrphzbgm1#
来自MDN docs: Window storage event的巨大警告:
[
window.addEventListener('storage', ...)
]无法在进行更改的同一页面上工作-它实际上是域中其他页面使用存储同步所做更改的一种方式。所以这可能就是为什么它对你不起作用(对我也一样)--你试图在同一页的其他部分回应这个听众。
gj3fmq9x2#
您可以使用一个函数来创建对象的代理方法
像这样使用它
可以在组件构造函数中添加侦听器 * someFuncWhichIsCalledEveryTimeWhenLocalStorageChanges *
eqzww0vc3#
**localDataStorage**接口(HTML5 localStorage API的一个方便的 Package 器)可以在发生存储事件的同一 * 页面/选项卡/窗口上方便地触发更改事件。免责声明:我是界面的作者。
安装localDataStorage后,此示例代码将让您看到这些更改事件:
gwbalxhn4#
如果你想监听同一个文档中的存储变化事件,可以像下面这样增加一个存储变化事件发射函数,当你使用localStorage.setItem(“xx”,“xx”),并且在它之后触发这个函数,你就会检测到这个事件~
blpfk2vs5#
简化的解决方案!
li9yvcax6#
一个月一个月一个月一个月
确保使用正确的event properties。
Here is a basic example of the event listener.
g9icjywg7#
在另一个文档的上下文中修改存储区域(localStorage或sessionStorage)时,将激发storage事件。
https://developer.mozilla.org/en-US/docs/Web/Events/storage