Vue項目中列表組件中寫key的作用

key的作用是什么模暗?

key是給每一個vnode的唯一id,可以依靠key,更準確, 更的拿到oldVnode中對應的vnode節(jié)點传透。

可以參考一下這個sameVnode的源碼窍箍。

? 官網(wǎng)推薦的使用key怨规,應該理解為“使用唯一id作為key”俭茧。因為index作為key开皿,和不帶key的效果是一樣的涧黄。index作為key時篮昧,每個列表項的index在變更前后也是一樣的,都是直接判斷為sameVnode然后復用笋妥。

說到底懊昨,key的作用就是更新組件時判斷兩個節(jié)點是否相同。相同就復用春宣,不相同就刪除舊的創(chuàng)建新的酵颁。

? 正是因為帶唯一key時每次更新都不能找到可復用的節(jié)點,不但要銷毀和創(chuàng)建vnode月帝,在DOM里添加移除節(jié)點對性能的影響更大躏惋。所以會才說“不帶key可能性能更好”∪赂ǎ看下面這個實驗簿姨,渲染10w列表項,帶唯一key與不帶key的時間對比:

不使用key的情況:

<li v-for="item in list">{{ item.text }}</li>
不使用key

使用id作為key的情況:

使用key

list構(gòu)造

 const list1 = []
  const list2 = []
  for (let i = 0; i <= 100000; i++) {
    list1.push({
      id: i,
      text: i
    })
    list2.push({
      id: i * 2,
      name: 100000 - i
    })
  };

因為不帶key時節(jié)點能夠復用簸搞,省去了銷毀/創(chuàng)建組件的開銷扁位,同時只需要修改DOM文本內(nèi)容而不是移除/添加節(jié)點,這就是文檔中所說的“刻意依賴默認行為以獲取性能上的提升”
既然如此趁俊,為什么還要建議帶key呢域仇?因為這種模式只適用于渲染簡單的無狀態(tài)組件。對于大多數(shù)場景來說寺擂,列表組件都有自己的狀態(tài)殉簸。
舉個例子:一個分頁組件的列表,列表里的每項包含圖片和文字沽讹。不帶key屬性的情況下般卑,在第一頁然后切換到第二頁時,第二頁的圖片每項顯示的還是第一頁的圖片爽雄,可以為列表項帶上id作為唯一key蝠检,那么每次渲染列表時都會完全替換所有組件,使其擁有正確狀態(tài)挚瘟。

這只是個簡單的例子叹谁,實際應用會更復雜。帶上唯一key雖然會增加開銷乘盖,但是對于用戶來說基本感受不到差距焰檩,而且能保證組件狀態(tài)正確,這應該就是為什么推薦使用唯一id作為key的原因订框。至于具體怎么使用析苫,就要根據(jù)實際情況來選擇了。


本文到底就結(jié)束啦~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市衩侥,隨后出現(xiàn)的幾起案子国旷,更是在濱河造成了極大的恐慌,老刑警劉巖茫死,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跪但,死亡現(xiàn)場離奇詭異,居然都是意外死亡峦萎,警方通過查閱死者的電腦和手機屡久,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爱榔,“玉大人被环,你說我怎么就攤上這事〈牝剑” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵丁鹉,是天一觀的道長妒潭。 經(jīng)常有香客問我,道長揣钦,這世上最難降的妖魔是什么雳灾? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮冯凹,結(jié)果婚禮上谎亩,老公的妹妹穿的比我還像新娘。我一直安慰自己宇姚,他們只是感情好匈庭,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浑劳,像睡著了一般阱持。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上魔熏,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天衷咽,我揣著相機與錄音,去河邊找鬼蒜绽。 笑死镶骗,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的躲雅。 我是一名探鬼主播鼎姊,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了此蜈?” 一聲冷哼從身側(cè)響起即横,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎裆赵,沒想到半個月后东囚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡战授,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年页藻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片植兰。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡份帐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出楣导,到底是詐尸還是另有隱情废境,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布筒繁,位于F島的核電站噩凹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏毡咏。R本人自食惡果不足惜驮宴,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呕缭。 院中可真熱鬧堵泽,春花似錦、人聲如沸恢总。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽片仿。三九已至佳谦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間滋戳,已是汗流浹背钻蔑。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奸鸯,地道東北人咪笑。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像娄涩,于是被迫代替她去往敵國和親窗怒。 傳聞我的和親對象是個殘疾皇子映跟,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容