vue中 key 值的作用

2021-09-14 07:40:35 字數 2879 閱讀 5423

1 .index值不是一定不變的,如果不加key值的話,刪除前面的項。後面的index可能變也可能不變,比如加個定時器的時候會變,不加定時器不會變

2 .不加key的話,更新機制的進行diff的時候是會全部比較的,比如刪除第乙個的話,後面的元素其實都不一樣,會一項一項的比較。然後全部元素都替換,沒有做到最小更新。而且裡面的傳的值也會變,如果這個時候你要根據裡面的值刪除元素的話,就會出錯,尤其是加了定時器之後

3 .所以這個key值對資料改變之後的diff更新比較有很大的效能提公升,或者說有了key和沒有key是兩種比較和更新機制

4 .使用v-for更新已渲染的元素列表時,預設採用舊地復用策略,會復用之前的元素,有的時候使用index來做為key值,其實不是特別推薦的。可能會發生變化,最好是時間戳加上乙個自增的數字

5 .如果有key的話,就會根據key值去判斷某個是否修改,重新渲染這一項

6 .虛擬dom的diff演算法

1 .兩個相同的元件產生類似的dom結構,不同的元件產生不同的dom結構

2 .同一層級的一組節點,可以通過唯一的id進行區分

3 .當一層有很多相同的節點的時候,也就是列表節點時,diff演算法的更新過程預設情況是遵循以上原則

1 .當我們想把乙個f插入到b,c之間,預設是這樣的

2 .乙個頂乙個,並不是我們想象的那樣,同理,刪除的時候也是這樣(c->f,d-c,e-d,然後插入e)

3 .但是如果我們給他加了key值之後

4 .diff演算法就可以正確的識別此節點,找到正確的位置並插入新的節點

5 .key的作用是為了更加高效的更新虛擬do'm,另外在vue中使用相同標籤元素的過度切換的時候,也需要使用key屬性,其目的是為了讓vue區分它們,否則vueh就只會替換其內部屬性而不會觸發過度效果

1 .當頁面的資料發生變化的時候,diff演算法知乎i比較同一層級的節點

1 .如果節點型別不同,直接乾掉前面的節點,在建立並插入新的節點,不會在比較這個節點以後的子節點了

2 .如果節點型別相同,重新設定該節點的屬性,從而實現節點的更新

3 .所以,當某一層有很多相同的節點的時候,diff的預設是遵循第二條的

2 .物件遍歷渲染的時候,是按照object.keys()結果遍歷的,所以不能保證絕對的順序。所以最好是按照陣列裡面包含物件的方法來渲染,這樣可以保證絕對的順序

3 .官方文件的明確顯示的部分

1 .當使用v-for更新已經渲染過的元素列表時,預設的使用」舊地復用「策略,如果資料項的順序被改變,vue是不會移動dom來匹配資料項的順序,而是簡單的復用此處的每個元素,並且確保他在特定索引下顯示已被渲染過的元素

2 .這個模式預設是高效的,但是只適用於不依賴子元件狀態或臨時dom鑽港台,比如列表渲染輸出

3 .為了給vue乙個提示,使他可以追蹤每個節點的身份,從而重用和重新排序現有元素,這就需要為每乙個項提供乙個唯一的key屬性

4 .注意:不新增key的效能其實更加優秀。除了想要效能或者輸出非常的內容非常簡單

5 .不要使用物件或者陣列之類的非原始值作為v-for的key,用字串或者整數型別的值來取代

4 .資料的這些方法會返回乙個新的資料,也就是說當呼叫這些方法的時候需要使用新陣列替換舊的陣列。vue為了使得dom元素得到最大範圍的重用而實現了一些智慧型的,啟發式的方法。也就是說,用乙個含有相同元素的資料去替換原來的資料會有非常高效的操作

5 .不能檢測到的變化:陣列裡面使用索引設定乙個項時,包括物件新增新的值的時候,所以這兩種情況都需要使用特定的方法。只不過是不支援常用的用法罷了,當時為什麼不加個語法糖呢。。

6 .同乙個元素裡面v-for和v-if的優先順序,v-if將執行於每乙個v-for迴圈中,當想根據某些條件在渲染一些dom的時候,舊可以使用這個

7 . v-if當父元素 v-for當子元素

1 .v-if中想要渲染多個元素的時候,可以把乙個template元素當成不可見的包裹元素,並在上面使用v-if,最終的渲染結果將不會包括template元素

2 .為了盡可能高效的渲染元素,通常會復用已有元素而不是從頭開始渲染,除了更快,還以一些其他的好處

1 .以下是沒有key的時候

2 .input切換的時候,會保留之前填的**

3 .

3 .新增乙個key值,vue就知道這兩個元素是完全不一樣的,所以建立的時候直接從0開始,而不是復用

4 .但是如果其他的地方沒加key,也是會復用的。所以要在合適的位置加上key

5 .v-show:帶有v-show的元素始終會被渲染並保留在dom中,v-show只是簡單的切換css屬性display

6 .不支援template,也不支援v-else

1 .v-if是真正的條件渲染因為塌糊確保在切換過程中條件塊內的事件***和子元件適當的被銷毀和重建

2 .v-if也是惰性的,如果在初始渲染時條件為假,則什麼都不做,直到條件第一次變為真,才會開始渲染條件塊

3 .v-show:不管是什麼條件,都是會被渲染,只是簡單的進行css切換

4 .v-if有更高的切換開銷,v-show有更高的初始渲染開銷。如果需要頻繁的切換,使用v-show,如果在執行時條件很少改變,則使用v-if較好

vue中key的作用

v for中為什麼要加key呢,這裡我給大家舉個栗子 沒有key text v model name add 新增 button div for item,i in list checkbox li ul 建立 vue 例項,得到 viewmodel var vm newvue methods th...

Vue中key的作用

相信大多數vue開發者接觸到key屬性的時候是使用v for進行列表渲染的時候,如果不使用key屬性,vue會產生警告,那麼在這個時候key屬性的作用是什麼呢?官方文件中說 當 vue.js 用v for正在更新已渲染過的元素列表時,它預設用 就地復用 策略。如果資料項的順序被改變,vue 將不會移...

vue中key的作用

vue和react都實現了一套虛擬dom,使我們可以不直接操作dom元素,只運算元據便可以重新渲染頁面。其功勞歸功於背後高效的diff演算法。兩個相同的元件產生類似的dom結構,不同的元件產生不同的dom結構。同一層級的一組節點,他們可以通過唯一的id進行區分。當頁面的教據發生變化時,diff演算法...