react hook使用useState更新數(shù)組,無法更新問題及解決
問題描述
const [textList, setTextList] = useState(原數(shù)組); setTextList(新數(shù)組);
當修改原數(shù)組時,如果原數(shù)組是個深層數(shù)組,使用setTextList修改時,不會觸發(fā)頁面刷新
原因分析
這個涉及到可變對象和不可變對象的知識,
在vue和react中,如果更新可變對象時,可能會引起視圖更新,
這是因為,vue和react默認都是淺監(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ù)組,相當于淺拷貝,這樣才能觸發(fā)更新數(shù)據(jù) const copy = [...value]; copy.splice(index, 1); setValue(copy); }, }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
react-router?重新加回跳轉(zhuǎn)攔截功能詳解
這篇文章主要為大家介紹了react-router?重新加回跳轉(zhuǎn)攔截功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02