我有一个单页应用程序,我需要对本地存储中的每个更改做出反应,它看起来像:
MyComponent {
someFuncWhichIsCalledEveryTimeWhenLocalStorageChanges() {
console.log('local storage changed!);
}
funcThatChangesLocalStorage() {
localstorage.setItem('key',val);
localstorage.getItem('key')
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用 localstorage 事件:
window.addEventListener('storage', function(event){
...
});
Run Code Online (Sandbox Code Playgroud)
但这不起作用......所以我正在考虑使用Observable<>,只是不知道如何正确实现它。
我想在同一页面上监听localStorage API中发生的更改(不像规范所说的那样在多个标签中).
我目前正在使用此代码:
var storageHandler = function () {
alert('storage event 1');
};
window.addEventListener("storage", storageHandler, false);
localStorage.setItem('foo', 'bar');
Run Code Online (Sandbox Code Playgroud)
有没有人知道一个vanilla JavaScript方式在一个页面上监听localStorage上的事件(没有jQuery)
在我的反应应用程序中,我将用户数据过滤器保存到本地存储中。当数据更改时,我想使用Effect。如何正确触发该效果?我试过这个:
useEffect(() => {
if (rawEstateObjects.length && localStorage.activeEstateListFilter) {
const activeFilter = JSON.parse(localStorage.activeEstateListFilter)
if (activeFilter.length) {
applyFilter(activeFilter)
}
}
}, [rawEstateObjects, localStorage.activeEstateListFilter])
Run Code Online (Sandbox Code Playgroud)
但localStorage.activeEstateListFilter不触发效果..
我试图让我的 React 应用程序从 localStorage 获取 todos 对象数组并将其交给 setTodos。为此,我需要有一个 useEffect 来监听本地存储中发生的任何更改,所以这就是我所做的:
useEffect(() => {
if(localStorage.getItem('todos')) {
const todos = JSON.parse(localStorage.getItem('todos'))
setTodos(todos);
}
}, [ window.addEventListener('storage', () => {})]);
Run Code Online (Sandbox Code Playgroud)
问题是每次我从 localStorage 添加或删除某些内容时都不会触发 useEffect 。这是让 useEffect 监听 localStorage 的错误方法吗?
我尝试了此处解释的解决方案,但它对我不起作用,我真诚地不明白为什么它应该起作用,因为监听器没有作为 useEffect 中的第二个参数传递