欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > 【React】如何监听LocalStorage的变化

【React】如何监听LocalStorage的变化

2024/10/25 6:28:07 来源:https://blog.csdn.net/owo_ovo/article/details/140047922  浏览:    关键词:【React】如何监听LocalStorage的变化

在代码中遇到了需要在react中监听localStorage的数据,下意识想到的是按照useEffect监听useState变化那一套,但是未生效。

代码如下:

useEffect(()=>{console.log("变化了")
},[localStorage.getItem('data')])

需要使用监听器

useEffect(() => {function checkData() {const item = localStorage.getItem('data')if (item) {setData(item)}}window.addEventListener('storage', checkData)return () => {window.removeEventListener('storage', checkData)}
}, [])

但是上述方式有弊端,只能监听同源的两个页面之间的 storage 变更,没法监听同一个页面的变更。

需要自定义事件

const originalSetItem = localStorage.setItem
localStorage.setItem = function (key, newValue) {const setItemEvent = new Event("setItemEvent")setItemEvent[key] = newValuewindow.dispatchEvent(setItemEvent)originalSetItem.apply(this, [key, newValue])
}// 添加事件监听器
function handleSetItemEvent(event) {console.log("监听到本地存储发生变化了:", event)console.log("Key:", Object.keys(event)[0])console.log("Value:", event[Object.keys(event)[0]])
}
window.addEventListener("setItemEvent", handleSetItemEvent)// 当不再需要时,移除事件监听器
window.removeEventListener("setItemEvent", handleSetItemEvent)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com