react純函數(shù)組件setState更新頁面不刷新的解決
問題描述:
const [textList, setTextList] = useState(原數(shù)組); setTextList(新數(shù)組);
當修改原數(shù)組時,如果原數(shù)組是個深層數(shù)組(不只一層),使用setTextList修改時,不會觸發(fā)頁面刷新
原因分析:
這個涉及到可變對象he不可變對象的知識,在vue和react中,如果更新可變對象時,可能會引起視圖更新,這是因為,vue和react默認都是淺監(jiān)聽,只會監(jiān)聽數(shù)據(jù)的第一層,內(nèi)層數(shù)據(jù)發(fā)生改變,并不會監(jiān)聽到。
解決方案:
這里我的解決方案是,先將原數(shù)組深拷貝,賦值給新數(shù)組,再修改新數(shù)組,將修改后的新數(shù)組傳遞進去,這樣就會引起視圖更新。
var lists = textList.concat(); lists.splice(index, 1); setTextList(lists);
補:react中,hooks鉤子時useState更新不渲染組件的問題

當使用react,寫如圖組件時,發(fā)現(xiàn)一個很關(guān)鍵的問題,當選擇用class寫的時候,很容易通過組件更新渲染。
當我決定用函數(shù)式組件hooks來重構(gòu)我的組件的時候,發(fā)現(xiàn)了一個很難搞的問題,當我通過onChange去改變父組件value的時候,value的值改了,竟然沒有重新渲染組件????
一臉懵逼的我,于是試圖將class組件時先將value設為空再賦值-----失敗了
于是試圖通過鉤子的生命周期看了一遍。。。。------失敗了
還是百度吧------發(fā)現(xiàn)了同樣的問題。。。發(fā)現(xiàn)用只要再后面加slice()
于是本著先解決問題的態(tài)度,將圖中紅圈位置改為了onChange(value.slice())
-----于是,解決了這個神奇的問題。
現(xiàn)在問題解決了,回過頭來看看到底怎么回事。。。
查看文檔發(fā)現(xiàn)一句話useState里數(shù)據(jù)務必為immutable (不可賦值的對象)
也就是ass component的state也提倡使用immutable數(shù)據(jù),但不是強制的,因為只要調(diào)用了setState就會觸發(fā)更新。所以再class組件中沒有出現(xiàn)這種問題,或者通過改變?yōu)榭赵儋x值是可以觸發(fā)更新的。
但是再使用useState時,如果在更新函數(shù)里傳入同一個對象時將無法觸發(fā)更新。
于是解決思路就是通過slice() 返回一個新的對象去賦值是解決問題的關(guān)鍵。。。。
以上就是react純函數(shù)組件setState更新頁面不刷新的解決的詳細內(nèi)容,更多關(guān)于react useState頁面不刷新的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
React新擴展函數(shù)setState與lazyLoad及hook介紹
這篇文章主要介紹了React新擴展函數(shù)setState與lazyLoad及hook,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-12-12
React循環(huán)遍歷渲染數(shù)組和對象元素方式
這篇文章主要介紹了React循環(huán)遍歷渲染數(shù)組和對象元素方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
Reactjs?+?Nodejs?+?Mongodb?實現(xiàn)文件上傳功能實例詳解
今天是使用?Reactjs?+?Nodejs?+?Mongodb?實現(xiàn)文件上傳功能,前端我們使用?Reactjs?+?Axios?來搭建前端上傳文件應用,后端我們使用?Node.js?+?Express?+?Multer?+?Mongodb?來搭建后端上傳文件處理應用,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2022-06-06
React獲取Java后臺文件流并下載Excel文件流程解析
這篇文章主要介紹了React獲取Java后臺文件流下載Excel文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06
React Native之ListView實現(xiàn)九宮格效果的示例
本篇文章主要介紹了React Native之ListView實現(xiàn)九宮格效果的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
TypeScript在React中的應用技術(shù)實例解析
這篇文章主要為大家介紹了TypeScript在React中的應用技術(shù)實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04

