前言:
用vue框架寫前端代碼時經常會用用到v-for這個方法,但使用此方法時vue推薦我們加上一個唯一標識key這是為什么呢?閱讀了網上各位大神的文章以及自己的一些理解對這個問題有了新的認識。所以記錄下來,若各位看官看到文章里面有錯誤的地方請指正一下。謝謝各位大佬。
一.diff算法
修改渲染真實的dom會引起整個dom樹的重繪和重排。diff算法可以幫助我們只對我們想要修改的部分進行更新而不會引起整個dom樹的重繪和重排。 我們先根據dom生成virtual DOM,當virtual Dom上的某個dom節點數據改變后會生成一個新的Vnode.將新生成的Vnode和oldVnode做對比。發現有修改的地方就直接渲染到真實的dom樹上。
diff算法一邊比較新舊節點的區別一邊在真實的dom樹上打補丁
二.key的作用
我個人覺得key的作用就是為了快速的找到新節點對應的舊節點。key是給每一個vnode唯一的id,可以依靠key,更準確, 更快的拿到oldVnode中對應的vnode節點。但不使用key時代碼也可以運行但是會報warning.為什么呢。
三.不使用key時的執行
例:不使用key 一個數組arr=['1','2','3','4','5','6']
。
<view v-for='arr'> {{item}} </view>
上面代碼會生成6個div每個div對應的arr中的數字。現在我們將arr變成[0, 1, 2, 3, 7, 8, 9]。更新渲染的步驟時這樣的原先div中的1變成0 2變成1以此類推最后新增一個div內容為9。 Vue會通過改變原來元素的內容和增加/減少元素來完成這個改變,因為沒有key屬性,Vue無法跟蹤每個節點,只能通過這樣的方法來完成變更。
四.使用key時
例:numbers為[1, 2, 3, 7, 8, 9]
<div v-for="(num, index) in numbers" :key="index"> {{num}} </div>
變成了[0, 1, 2, 3, 7,8,9]新增一個
元素,它的內容為0,并將它插入原先內容為1的元素之前。 在有了key屬性之后,Vue會記住元素們的順序,并根據這個順序在適當的位置插入/刪除元素來完成更新,這種方法比沒有key屬性時的就地復用策略效率更高。 總體來說,當使用列表渲染時,永遠添加key屬性,這樣可以提高列表渲染的效率,提高了頁面的性能。
總結
以上所述是小編給大家介紹的使用vue for時為什么要key屬性,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!
新聞熱點
疑難解答