React Native--ListView數(shù)據(jù)源修改,界面不刷新

? ? 在項目中,經(jīng)常要使用ListView實(shí)現(xiàn)列表功能,有的場景是需要動態(tài)刷新ListView的界面。作為小白的我,就想著通過改變數(shù)據(jù)源來修改界面,但是數(shù)據(jù)修改了,界面不刷新。

通過state保存
第一次賦值
listview關(guān)聯(lián)數(shù)據(jù)源
修改數(shù)組中的某個數(shù)據(jù)

? ? 事與愿違,界面沒刷新。度娘的結(jié)果:const dataTemp = datas 的操作,實(shí)現(xiàn)的是淺拷貝,dataTemp的數(shù)據(jù)的改變,同步到了datas。因?yàn)檫@兩個變量的在內(nèi)存中的引用地址一致。因此rowHasChanged函數(shù)未觸發(fā),界面不刷新。

為了觸發(fā)rowHasChanged函數(shù),我們需要對datas進(jìn)行深拷貝,在內(nèi)存中新建一個對象,并引用。深拷貝的方式:const dataTemp =JSON.parse(JSON.stringify(datas))。然后給更新state:this.setState({DataSource :this.state.DataSource.cloneWithRows(dataTemp),})。

? ? 到此,界面實(shí)現(xiàn)了刷新。講這么多,其實(shí)關(guān)鍵點(diǎn)就是:淺拷貝、深拷貝的知識點(diǎn)。淺拷貝內(nèi)存中的指向一致,深拷貝內(nèi)存中的指向不一致。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容