1缴挖、key的作用
react中的key屬性蒋得,它是一個(gè)特殊的屬性乙墙,它是出現(xiàn)不是給開發(fā)者用的(例如你為一個(gè)組件設(shè)置key之后不能獲取組件的這個(gè)key props)刷晋,而是給react自己用的。
簡單來說矢否,react利用key來識別組件仲闽,它是一種身份標(biāo)識標(biāo)識,就像我們的身份證用來辨識一個(gè)人一樣僵朗。每個(gè)key對應(yīng)一個(gè)組件赖欣,相同的key react認(rèn)為是同一個(gè)組件,這樣后續(xù)相同的key對應(yīng)組件都不會(huì)被創(chuàng)建验庙。
key不是用來提升react的性能的顶吮,不過用好key對性能是有幫助的。
2粪薛、key的使用場景
在項(xiàng)目開發(fā)中悴了,key屬性的使用場景最多的還是由數(shù)組動(dòng)態(tài)創(chuàng)建的子組件的情況,需要為每個(gè)子組件添加唯一的key屬性值
另外汗菜,還有一種比較常見的場景:為一個(gè)有復(fù)雜繁瑣邏輯的組件添加key后让禀,后續(xù)操作可以改變該組件的key屬性值,從而達(dá)到先銷毀之前的組件陨界,再重新創(chuàng)建該組件巡揍。
3、key的最佳實(shí)踐
index作為key是一種反模式
在list數(shù)組中菌瘪,用key來標(biāo)識數(shù)組創(chuàng)建子組件時(shí)腮敌,若數(shù)組的內(nèi)容只是作為純展示,而不涉及到數(shù)組的動(dòng)態(tài)變更俏扩,其實(shí)是可以使用index作為key的糜工。
但是,若涉及到數(shù)組的動(dòng)態(tài)變更录淡,例如數(shù)組新增元素捌木、刪除元素或者重新排序等,這時(shí)index作為key會(huì)導(dǎo)致展示錯(cuò)誤的數(shù)據(jù)嫉戚。
所以在做數(shù)組新增元素刨裆、刪除元素或者排序的時(shí)候不要使用index作為key澈圈,可以用后端提供過來的唯一值 ID
得出結(jié)論
在數(shù)組中生成的每項(xiàng)都要有key屬性,并且key的值是一個(gè)永久且唯一的值帆啃,即穩(wěn)定唯一瞬女,所以key的值要穩(wěn)定唯一,但不能使用random來生成key的值
Math.random隨機(jī)生成努潘,雖然能夠保持其唯一性诽偷,但是它的值是隨機(jī)而不是穩(wěn)定的,在數(shù)組動(dòng)態(tài)改變時(shí)會(huì)導(dǎo)致數(shù)組元素中的每項(xiàng)都重新銷毀然后重新創(chuàng)建疯坤,有一定的性能開銷报慕;另外可能導(dǎo)致一些意想不到的問題出現(xiàn)。
所以:
key的值要保持穩(wěn)定且唯一压怠,不能使用random來生成key的值卖子。
4、key的其他注意事項(xiàng)
key屬性是添加到自定義的子組件上刑峡,而不是子組件內(nèi)部的頂層的組件上。
key值的唯一是有范圍的玄柠,即在數(shù)組生成的同級同類型的組件上要保持唯一突梦,而不是所有組件的key都要保持唯一
不僅僅在數(shù)組生成組件上,其他地方也可以使用key羽利,主要是react利用key來區(qū)分組件的宫患,相同的key表示同一個(gè)組件,react不會(huì)重新銷毀創(chuàng)建組件實(shí)例这弧,只可能更新娃闲;key不同,react會(huì)銷毀已有的組件實(shí)例匾浪,重新創(chuàng)建組件新的實(shí)例皇帮。
自學(xué),知識點(diǎn)記錄蛋辈。
參考博客