官术网_书友最值得收藏!

2.4 列表和Keys

在組件中渲染列表數(shù)據(jù)是非常常見的場(chǎng)景,例如,BBS項(xiàng)目PostList組件就需要根據(jù)列表數(shù)據(jù)posts進(jìn)行渲染:

下面運(yùn)行BBS項(xiàng)目,然后打開Chrome瀏覽器的控制臺(tái),可以看到如圖2-5所示的警告信息。

圖2-5

警告信息提示我們,應(yīng)該為列表中的每個(gè)元素添加一個(gè)名為key的屬性。那么這個(gè)屬性有什么作用呢?原來,React使用key屬性來標(biāo)記列表中的每個(gè)元素,當(dāng)列表數(shù)據(jù)發(fā)生變化時(shí),React就可以通過key知道哪些元素發(fā)生了變化,從而只重新渲染發(fā)生變化的元素,提高渲染效率。

一般使用列表數(shù)據(jù)的ID作為key值,例如可以使用帖子的ID作為每一個(gè)PostItem的key:

再次運(yùn)行程序,你會(huì)發(fā)現(xiàn)之前的警告消息已經(jīng)不存在了。本節(jié)項(xiàng)目源代碼的目錄為/chapter-02/bbs-components-keys。

如果列表包含的元素沒有ID,也可以使用元素在列表中的位置索引作為key值,例如:

但并不推薦使用索引作為key,因?yàn)橐坏┝斜碇械臄?shù)據(jù)發(fā)生重排,數(shù)據(jù)的索引也會(huì)發(fā)生變化,不利于React的渲染優(yōu)化。我們還會(huì)在第5章中詳細(xì)說明這一情況。

雖然列表元素的key不能重復(fù),但這個(gè)唯一性僅限于在當(dāng)前列表中,而不是全局唯一。例如在一個(gè)組件中兩次使用post.id作為列表數(shù)據(jù)的key:

主站蜘蛛池模板: 宽甸| 九台市| 天水市| 乌鲁木齐市| 资中县| 长兴县| 连南| 敖汉旗| 武功县| 大荔县| 长沙县| 兴业县| 儋州市| 常熟市| 新安县| 淄博市| 襄樊市| 庐江县| 彭水| 巫山县| 建平县| 天峻县| 黎川县| 陈巴尔虎旗| 阜平县| 彭州市| 张掖市| 青川县| 和平区| 黄山市| 绥阳县| 江陵县| 五指山市| 榆中县| 长泰县| 新津县| 太白县| 沁源县| 中牟县| 昌吉市| 抚远县|