開發者要了解index作為key是反模式

2021-09-23 07:14:55 字數 896 閱讀 4482

我曾多次看到開發者在渲染列表的時候把列表項的index作為它的key。

/> 

)}  這看起來很優雅,而且能夠解決警告(這才是「真」問題,對吧?)的問題,這樣做有什麼危險呢?

讓我來解釋,key是react唯一用來確定dom元素的東西,如果你想列表增加一項或移除中間的某項,會發生什麼事?如果key和之前乙個一樣react就會假定這個dom元素和之前對應的元件是乙個,但是它們可能並不是同乙個了。

為了證明潛在的危險我建立了乙個簡單示例

這表明,如果不指定key的時候react會使用index,因為這是那個時候最好的猜測,而且它會警告你說這不是最優解(它通過令人困惑的語句表述這個意思)。如果你主動提供了它,react就認為你知道你在幹什麼。記住這個示例,它能產生不可**的結果。

比較好

像這樣的應該都有乙個永久的唯一的屬性,當列表項建立的時候它是最合適被設定為key的,顯然我是在說id,我們可以用下面的方式使用它:

/> 

)}  另外的實現方式是把編號遞增移動到抽象方法中,使用乙個全域性的index來確保任何兩個列表項的id不同。

todocounter = 1; 

function createnewtodo(text)  

}更好

var shortid = require('shortid'); 

function createnewtodo(text)  

}  tl;dr:為每個列表項生成乙個唯一的id,並在渲染列表的時候使用它作為key。

作為開發者的反思

有的開發人員通常想到做某個專案,首先會想到專案的實施方法,專案中會遇到的困難,如果專案比較簡單,做起來會覺得沒意思,而專案比較複雜,卻又覺得困難重重,通常在猶豫中度過每一天,當然專案不是乙個人做的,乙個優秀的開發人員是需要好的領導去帶的。同時,非開發人員想到某個專案,更多的是想到關於這個專案的市場價...

作為乙個iOS開發者必須了解的C語言32個關鍵字

寫在開始 首先,我們所謂的c語言大多是指由ansi ansi是一種字元 為使計算機支援更多語言,通常使用 0x00 0x7f 範圍的1 個 位元組來表示 1 個英文本元。超出此範圍的使用0x80 0xffff來編碼,即擴充套件的ascii編碼 標準定義的c語言,這裡所指的c語言也是此類。c語言關鍵字...

開發者應該了解的API技術清單!

此外,難道我們的競爭對手還會自己來打造非核心的程式組成部分嗎?面對緊張的競爭局面,我們必須充分且合理地分配資源,讓自己盡可能地走在對手的前面。工具和解決方案 以下作者整理了乙個api服務清單,一方面希望能讓你的開發過程變得輕鬆,另外一方面希望能幫你節約時間,精力和努力。認證 授權 authentic...