react hook使用useState更新數(shù)組,無法更新問題及解決
更新時間:2024年03月13日 10:11:19 作者:on_風而
這篇文章主要介紹了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)聽到。
解決方法
這里應該先將原數(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一遍,解構一遍,再把結構的值為了生成新的數(shù)組,相當于淺拷貝,這樣才能觸發(fā)更新數(shù)據(jù)
const copy = [...value];
copy.splice(index, 1);
setValue(copy);
},
}
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

