Vue學習-vue中v-for為何要加key?index為何不推薦作為key


參考:

https://blog.csdn.net/weixin_42878211/article/details/107853208 

 

 

 總結: 

可以簡單得理解:加了具有唯一性得key之后,id的checkbox跟內容進行了一個關聯,是我們所要展示的效果

1、vue 中template模板會編譯為渲染函數render,然后對比虛擬DOM,再更新到真實DOM上。
2、有key:通過移動節點復用節點來更新DOM
3、無key:會通過刪除新建節點來更新DOM
4、使用下標index作為Key:數組的操作刪除新增排序,會造成BUG

 

diff

diff算法的處理方法

對操作前后的dom樹同一層的節點進行對比,一層一層對比,如下圖:

 

 

當某一層有很多相同的節點時,也就是列表節點時,Diff算法的更新過程默認情況下也是遵循以上原則。
比如下面這種情況:

 

 

我們希望可以在B和C之間加一個F,Diff算法默認執行起來是這樣的:

 

 

即把C更新成F,D更新成C,E更新成D,最后再插入E,相當沒有效率!(刪除重建)
所以我們需要使用key來給每個節點做一個唯一標識,Diff算法就可以正確的識別此節點,找到正確的位置區插入新的節點。

 

 

 

vue中列表循環需加:key=“唯一標識” 唯一標識可以是item里面id 等,因為vue組件高度復用增加Key可以標識組件的唯一性,為了更好地區別各個組件 key的作用主要是為了高效的更新虛擬DOM。但是我們不推薦使用index作為key!

總結:key的作用主要就是為了高效的更新虛擬DOM,使用key值,它會基於key的變化重新排列元素順序,並且會移除key不存在的元素。它也可以用於強制替換元素/組件而不是重復的使用它。

不推薦index作為key值

當以數組為下標的index作為key值時,其中一個元素(例如增刪改查)發生了變化就有可能導致所有的元素的key值發生改變
diff算法時比較同級之間的不同,以key來進行關聯,當對數組進行下標的變換時,比如刪除第一條數據,那么以后所有的index都會發生改變,那么key自然也跟着全部發生改變,所以index作為key值是不穩定的,而這種不穩定性有可能導致性能的浪費,導致diff無法關聯起上一次一樣的數據。因此,能不使用index作為key就不使用index。

也不推薦index+字符串作為key的值

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM