vue中key的作用和原理

1.key值的作用

主要用于v-for語(yǔ)法中

  • 主要用在 Vue 的虛擬 DOM 算法,在新舊 nodes 對(duì)比時(shí)辨識(shí) VNodes,相當(dāng)于唯一標(biāo)識(shí)ID
  • Vue 會(huì)盡可能高效地渲染元素,通常會(huì)復(fù)用已有元素而不是從頭開(kāi)始渲染, 因此使用key值可以提高渲染效率,同理,改變某一元素的key值會(huì)使該元素重新被渲染
  • vue中在使用相同標(biāo)簽名元素的過(guò)渡切換時(shí),也會(huì)使用到key屬性,其目的也是為了讓vue可以區(qū)分它們,否則vue只會(huì)替換其內(nèi)部屬性而不會(huì)觸發(fā)過(guò)渡效果
2.diff算法部分代碼

通過(guò)sameVnode方法來(lái)判斷vNode和oldNode是否是同一個(gè)節(jié)點(diǎn),主要通過(guò)key值來(lái)判斷

 // src\core\vdom\patch.js
function sameVnode (a, b) {
    return (
        // 判斷a, b兩個(gè)Vnode上的key值是否相等
        a.key === b.key && (
            (
                a.tag === b.tag &&
                a.isComment === b.isComment &&
                isDef(a.data) === isDef(b.data) &&
                sameInputType(a, b)
            ) || (
                isTrue(a.isAsyncPlaceholder) &&
                a.asyncFactory === b.asyncFactory &&
                isUndef(b.asyncFactory.error)
            )
        )
    )
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 上面過(guò)程的圖畫(huà)重現(xiàn) 如果不使用key,則每一項(xiàng)都需要強(qiáng)制更新,在創(chuàng)建最后一項(xiàng) 若使用key循環(huán)舊數(shù)組,當(dāng)發(fā)現(xiàn)舊開(kāi)始...
    堅(jiān)持二十一天閱讀 3,329評(píng)論 0 6
  • 源碼中找答案:https://github.com/vuejs/vue/blob/dev/src/core/vdo...
    youah閱讀 3,336評(píng)論 2 1
  • key的作用主要是為了高效的更新虛擬DOM。另外vue中在使用相同標(biāo)簽名元素的過(guò)渡切換時(shí),也會(huì)使用到key屬性,其...
    奔跑吧兄弟_凱凱閱讀 5,377評(píng)論 0 0
  • 一、簡(jiǎn)介 1、 Vue.js 是什么 參考網(wǎng)址:https://cn.vuejs.org/v2/guide/ind...
    滿天繁星_28c5閱讀 565評(píng)論 0 1
  • 之前項(xiàng)目有個(gè)功能,數(shù)據(jù)間有三層關(guān)系,通過(guò)3個(gè)v-for實(shí)現(xiàn),渲染頁(yè)面元素的時(shí)候,出現(xiàn)錯(cuò)亂的情況,有點(diǎn)抓瞎。感覺(jué)和虛...
    南山_shicl閱讀 10,093評(píng)論 1 3

友情鏈接更多精彩內(nèi)容