react hook使用useState更新數(shù)組,無法更新問題及解決
問題描述
const [textList, setTextList] = useState(原數(shù)組); setTextList(新數(shù)組);
當(dāng)修改原數(shù)組時,如果原數(shù)組是個深層數(shù)組,使用setTextList修改時,不會觸發(fā)頁面刷新
原因分析
這個涉及到可變對象和不可變對象的知識,
在vue和react中,如果更新可變對象時,可能會引起視圖更新,
這是因為,vue和react默認(rèn)都是淺監(jiān)聽,只會監(jiān)聽數(shù)據(jù)的第一層,
如果數(shù)據(jù)是引用類型,內(nèi)層數(shù)據(jù)發(fā)生改變,并不會監(jiān)聽到。
解決方法
這里應(yīng)該先將原數(shù)組淺拷貝,賦值給新數(shù)組,再修改新數(shù)組(不影響原狀態(tài))
將修改后的新數(shù)組使用setValue傳遞進去,這樣就會引起視圖更新
const [value, setValue] = useState(initialArray); return{ //item是個數(shù)組 add: (item: T) => setValue([...value, item]), removeIndex: (index: number) => { // 把value copy一遍,解構(gòu)一遍,再把結(jié)構(gòu)的值為了生成新的數(shù)組,相當(dāng)于淺拷貝,這樣才能觸發(fā)更新數(shù)據(jù) const copy = [...value]; copy.splice(index, 1); setValue(copy); }, }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解react使用react-bootstrap當(dāng)輪子造車
本篇文章主要介紹了詳解react使用react-bootstrap當(dāng)輪子造車,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-08-08react-router?重新加回跳轉(zhuǎn)攔截功能詳解
這篇文章主要為大家介紹了react-router?重新加回跳轉(zhuǎn)攔截功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02每天一個hooks學(xué)習(xí)之useUnmount
這篇文章主要為大家介紹了每天一個hooks學(xué)習(xí)之useUnmount,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05