React Hook 監(jiān)聽localStorage更新問題
場景
數(shù)據(jù)存儲在了localStorage里,localStorage變化實時更新組件里使用到的數(shù)據(jù)
誤區(qū)
下意識想到的是按照useEffect監(jiān)聽useState變化那一套
useEffect(()=>{ useData(localStorage.getItem('rightCartData')) },[localStorage.getItem('rightCartData')])
很明顯不行,為什么?
示例不起作用的原因:
是和傳遞給 useEffect 的依賴數(shù)組有關(guān),它決定了在組件渲染時是否重新運行(render),這意味著如果 localStorage 更改,但它必須 先渲染(render)。
解決這個問題的方法:
是設(shè)置對 localStorage 的訂閱,監(jiān)視變化并通知組件重新渲染
Window: storage event - Web APIs | MDN
完整解決代碼
如下:
useEffect(() => { function rightCartData() { const item = JSON.parse(localStorage.getItem('rightCartData')) if (item) { setState(item); } } window.addEventListener('storage', rightCartData) return () => { window.removeEventListener('storage', rightCartData) } }, [])
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
react開發(fā)中如何使用require.ensure加載es6風格的組件
本篇文章主要介紹了react開發(fā)中如何使用require.ensure加載es6風格的組件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05React函數(shù)式組件Hook中的useState函數(shù)的詳細解析
Hook 就是 JavaScript 函數(shù),這個函數(shù)可以幫助你鉤入(hook into) React State以及生命周期等特性,這篇文章主要介紹了React Hook useState函數(shù)的詳細解析的相關(guān)資料,需要的朋友可以參考下2022-10-10