vue是通過比對組件自身新舊vdom進行更新的。
key的作用是唯一標識組件元素,輔助判斷新舊vdom節點在邏輯上是不是同一個對象。
比如說數組里插入了一項,這就是很經典的例子。當沒有key時,在某個節點位置插入一個元素,vue會認為不是同一個虛擬dom,會進行更新。如果key唯一標志了組件元素就不回出現這種問題。
當Vue用 v-for 正在更新已渲染過的元素列表是,它默認用“就地復用”策略。如果數據項的順序被改變,Vue將不是移動DOM元素來匹配數據項的改變,而是簡單復用此處每個元素,並且確保它在特定索引下顯示已被渲染過的每個元素。
我們都知道,Vue很大的一個特點就是雙向數據綁定,數據一旦改變,那么頁面就渲染新的數據呈現在頁面上。
那么問題來了,對於用v-for渲染的列表數據來說,數據量可能一般很龐大,而且我們經常還要對這個數據進行一些增刪改操作。
假設我們給列表增加一條數據,整個列表都要重新渲染一遍,那不就很費事了。
而key的出現就是盡可能的回避這個問題,提高效率,如果我們給列表增加了一條數據,頁面只渲染了這數據,那不就很完美了。
v-for默認使用就地復用策略,列表數據修改的時候,他會根據key值去判斷某個值是否修改,如果修改,則重新渲染這一項,否則復用之前的元素。
我們經常使用會使用index(即數組的下標)作為key,但其實不推薦怎么使用。
為了給Vue一個提示,以便它能跟蹤每個節點的身份,從而重用和重新排序現有元素,你需要為每項提供一個唯一 key 屬性。key屬性的類型只能為 string或者number類型。
示例
<!--注意:v-
for
循環的時候,key屬性只能使用number或string -->
<!--注意:key使用的時候,必須使用v-bind綁定屬性的形式,指定key的值 -->
<!-- 在組件中,使用 v-
for
循環的時候,或者在一些特殊情況中,如果v-
for
有問題
必須在使用v-
for
的同時,指定唯一的 字符串/數字 類型:key 值-->
<p v-for="item in list" :key="item.id"> <input type="checkbox"/> {{item.id}}--{{item.name}} </p>
總結
key的作用主要是為了高效的更新虛擬DOM!!!