在渲染列表的時候,我們須給組件或者元素分配一個唯一值的key, key是一個特殊的屬性,不會最終加在元素上面,也無法通過props.key來獲取,僅在react內部使用。react中的key本質是服務于diff算法, 它的默認值是null, 在diff算法過程中, 新舊節點是否可以復用, 首先就會判定key是否相同, 其后才會進行其他條件的判定(如節點類型,props),從而提升渲染性能,減少重復無效渲染。
- 為什么在渲染列表組件的時候,為什么不能將index設置為key?
因為顯式地把index設為key,和不設置key的效果是一樣,這就所謂的就地復用原則,即react在diff的時候,如果沒有key,就會在老虛擬DOM樹中,找到對應順序位置的組件,然后對比組件的類型和props來決定是否需要重新渲染。index作為key,不僅會在數組發生變化的時候,造成無效多余的渲染,還可能在組件含有非受控組件 (如input)的時候,造成UI渲染錯誤。
- 如果渲染列表的時候,key重復了會怎么樣?
首先react會給你輸出警告,告訴你key值應該是唯一的,以便組件在更新期間保持其標識。重復的key可能導致子節點被重復使用或省略,從而引發UI bug。