React元件更新混亂

2021-07-14 00:00:25 字數 1011 閱讀 7373

原因:元件key值的設定不規範導致。

解決辦法:給資料項設定唯一的id。使用id給元件設定key值,而不要使用,隨機的,或者按順序設定key值。

問題情況:

,,,

...]

}/** 渲染元件

* data 當期資料

* i 當期下標

* delete 刪除選框開啟

* setdelete 設定刪除函式

*/that.state.data.map(function(data,i)

data=

delete =

setdelete =

/>

})//批量刪除

delete : function());

i--;

}}

由於在渲染的時候 按順序給子元件 設定key值。

導致在運算元組後,渲染混亂。

//使用id,得到預期結果

key =

拓展:react的渲染機制

首先,react渲染時,並不是將所有元件都重新渲染一邊。

其次,react渲染時,有一定的優化機制。

react在渲染下乙個狀態時,先生成一棵虛擬的dom樹,和當前的狀態的dom樹進行對比,更新不一致的地方。

在渲染的時候,非常重要的乙個屬性就是key值,react通過比較key值相同的節點,來判斷其前後狀態的一致性,以及是否需要更新。

在我遇到的問題中,我就是因為按照順序 設定key值。所以如果刪除。在設定key值得時候,仍然會按順序設定key值,0,1,2,3…

react在比較時,雖然被刪除了,但是內部的資料並沒有改變。所以當key值沒有變化時。react認為沒有變化。則不會對其進行更新,反而由於,陣列的長度變化,導致data.map()渲染時,會總是拋棄最後乙個資料項。(個人理解,有不對的地方,希望大家指正。)

所以在設定key值得時候,盡量設定有意義的id,能跟隨資料狀態變化而變化的值。來避免出現意料不到的錯誤。

React 元件更新優化

3.react.memo 4.usememo shouldcomponentupdate和react.purecomponent是類元件中的優化方式,而react.memo是函式元件中的優化方式。class componentdiffpure extends purecomponent change...

react純函式元件useState更新頁面不重新整理

const textlist,settextlist usestate 原陣列 settextlist 新陣列 當修改原陣列時,如果原陣列是個深層陣列 不只一層 使用settextlist修改時,不會觸發頁面重新整理 這個涉及到可變物件he不可變物件的知識,在vue和react中,如果更新可變物件時...

React 入門 2 狀態 UI更新 類元件

ui無非就是應用程式的狀態的一種表現形式.我們已經了解reactdom.render 函式可以掛載或區域性更新dom,但是我們需要一種更精妙的方式.每當應用程式狀態有任何更新,我們就重新整理一次根節點,這樣是可以的,畢竟react只會更新變化的節點,但是整個樹節點都進行一次比對是冗餘的.我們來看這種...