React key值的作用和使用

2021-09-25 02:48:25 字數 1344 閱讀 3819

react 中的key 屬性是乙個特殊的屬性,它的出現不適給開發者用的,(列如你為乙個元件設定key 之後,也無法獲取這個元件的key值, )而是給react 自己用的。

簡單說,react利用key來識別元件,他是一種身份標識,就像每個人有乙個身份證來做辨識一樣。每個key 對應乙個元件,相同的key react認為是同乙個元件,這樣後續相同的key對應元件都不會被建立。

key的使用場景

在專案開發中,key屬性的使用場景最多的還是由陣列動態建立的子元件情況,需要為每個子元件新增唯一的key屬性值,那有的人會自然而然想到,key 和動態渲染的子元素獲取的index的值很接近,是不是我們可以直接使用index值 賦值給key呢?

列如:

})}

在嘗試後我們發現報錯沒了,渲染也沒問題。但是這裡我們強烈不推薦使用陣列的index 值來作為key。

如果資料更新僅僅是陣列重新排序或在其中間位置插入新元素,那麼所有元素都將重新渲染。

例如:本來index=2 的元素向前移動後,那該元素的key 不也同樣發生了改變,那這樣改變,key 就沒有任何存在的意義了,既然是作為身份證一樣的存在,那就不容有失,當然,在你用key值建立子元件的時候,若陣列的內容只是作為純展示,而不涉及到陣列的動態變更,其實是可以使用index 作為key的,

key的值必須保證唯一且穩定

我們在與key值打過幾次交到以後,感覺key值就類似於資料庫中的主鍵id一樣,有且唯一。

this.state = , , ],

....//省略

}render()

return(

:)})

);

注意以上範例中,動態渲染的資料中,key以資料的id來定,而李四王五的id相同而導致key 相同,最後的渲染結果為張三和李四,王五並沒有展示出來。主要是因為react 根據key認為李四王五是同乙個元件(他們兩個的key值相同),導致第乙個被渲染,後續的會被丟棄掉。

這樣有了key屬性後,就可以與元件建立一種對應關係,react 根據key來決定是銷毀重新建立元件還是更新元件。

並且,key也要保證值得穩定性,例如:

})}

尤其如以上範例中所示,key的值以math.random() 隨機生成而定,這使得陣列元素中的每項都重新銷毀然後重新建立,有一定的效能開銷;另外可能導致一些意想不到的問題出現。

所以key 的中必須保證其唯一和穩定性。

react key值的理解

key不是給開發者使用的,是給 react 在diff 演算法中使用的 diff 演算法會比較新舊虛擬 dom,並且是同層比較 當同一層中有多個元素的時候 會比較這一層的 key值 如果key相同 屬性改變更新屬性 位置改變就移動位置 不會發生刪除建立元素 只會將舊虛擬 dom的節點位置移動 如果k...

react key 的使用 筆記

1 為什麼要用key 官方詳細介紹 當react進行渲染時 會進行遍歷兩個dom節點的子元素 進行對比 有變化時 就產生乙個mutation 官方說法 個人理解是變化值 如果說在子元素末尾進行渲染 react會進行匹配第乙個和第二個元素所對應的樹 然後進行插入 這種插入方式 並不特別消耗效能 如果說...

3 1 1 值的宣告和作用域

3.1.1 值的宣告和作用域 我們已經知道,可以使用 let 關鍵字宣告不可變值。但尚未討論值的範圍域 scope 不過很容易用乙個具體的示例來解釋。清單 3.1 非常簡單,但是,在這四行 的後面到底隱藏了多少奧秘,我想你也一定會很驚訝。清單 3.1 值的作用域 f let number 42 1 ...