Rumah >hujung hadapan web >View.js >Analisis mendalam tentang kunci dalam vue untuk melihat apa kunci itu boleh digunakan!
Apakah kegunaan kunci? Artikel berikut akan memberi anda analisis mendalam tentang kunci dalam vue untuk melihat apa kunci itu boleh digunakan. Saya harap ia akan membantu anda!
Apakah kegunaan kunci?
虚拟DOM算法(diff算法)
VNodes
不使用key
di tempat 修改/复用相同类型元素
使用key
dan akan 重新排列元素顺序
elemen yang tidak wujud <.> 移除/销毁key
1 nod maya vnod
: maya nod, nod mayavnode
Adakah anda masih ingat unsur-unsur dalam pepohon DOM
文档, 元素, 节点
Jadi apakah itu nod maya?
Ringkasnya, untuk diberikan oleh? vue Nod pada halaman ialah nod maya
Div di sini ialah nod maya Dalam vue, ia wujud dalam bentuk ini<template id="my-app"> <div class="title" style="font-size: 30px; color: red;">哈哈哈</div> </template>Apa yang anda tidak faham mungkin. menjadi Atribut kanak-kanak, kerana div sekarang tidak mempunyai elemen anak, jadi nilainya hanya "hahaha". Jika terdapat elemen kanak-kanak, ia akan bersarang sehingga nod terakhir, seperti
const vnode = { type: "div", props: { class: "title", style: { "font-size": "30px", color: "red", }, }, children: "哈哈哈", };
children: [ { // 子元素 }, { // 子元素 } ],
2 vDOM Virtual DOMSama seperti DOM sebenar, jika ada nod sebenar, akan ada DOM sebenar, kemudian jika ada nod maya, akan ada DOM maya
Sudah tentu, perkara yang sama berlaku untuk pokok DOM maya, yang juga dipanggil pokok VNode Satu maksudnya ialah tidak perlu risau tentang perkara ini:
ditukar menjadi pepohon DOM maya:
<template id="my-app"> <div> <div> <p></p> <p></p> <ul> <li></li> <li></li> <li></li> </ul> </div> </div> </template>
Apabila DOM maya dijadikan DOM sebenar, ia tidak semestinya sama komponen, yang akan saya bincangkan kemudian
3 Proses pemaparan
4 Kes: Sisipkan fSelepas memahami yang sebelumnya, mari kita turun ke perniagaan Hanya satu kes diperlukan untuk memahami sepenuhnya peranan kunci. Mari kita mulakan seterusnya >
Mari kita lihat dahulu kes mudah ini (tanpa menambah kunci) Dapat dilihat bahawa tujuan soalan ini adalah untuk memasukkan f antara ab dan cd<ul> <li v-for="item in letters">{{item}}</li> </ul>
data() { return { letters: ['a', 'b', 'c', 'd'] } }, methods: { insertF() { this.letters.splice(2, 0, 'f'); } },Setelah memahami kes mudah ini, kami mula memikirkan sama ada terdapat sebarang cara untuk memasukkan Bagaimana pula dalam DOM sebenar mempunyai tiga jenis berikut:
Kaedah 1? (kaedah biasa)
Penjelasan : Padam terus dom sebelumnya dan render semula dengan vnod baharu
Kaedah 2 ( algoritma diff tanpa kunci)
Nota: Ini adalah algoritma diff lalai Vue apabila tiada kekunci Kod sumber yang sepadan adalah seperti yang ditunjukkan dalam rajah
Vue akan menilai sama ada anda telah membawa kunci melalui pernyataan penghakimanBerikut ialah situasi apabila tiada kunci
Kemudian semak untuk melihat proses pelaksanaan algoritma diff
di sini Huraikan secara ringkas: patchUnkeyedChildren()
Begitu juga, ikuti langkah kaedah dua untuk melihat kaedah
Kaedah ini adalah intipati, ia bermula menjadi rumit patchKeyedChildren()
Tampalan dari ekor, apabila perbezaan ditemui (di sini c !== f), pecah
Setakat ini, a, b, c, d have diberikan ke dalam DOM sebenar, bezanya cuma f, mari kita mula mencari f
Penghakiman:
Jika vnode lama < ; vnod baharu, kemudian pasangkannya ke vnod baharu
Jika vnod baharu > nyahpasang nod berlebihan vnod lama
jika vnode baru = vnode lama Ini sangat rumit Tanpa mengira pesanan, cuba tampal item yang sama di dalamnya, dan kemudian lakukan operasi nyahpasang dan lekapkan
tutorial vue.js"]
Atas ialah kandungan terperinci Analisis mendalam tentang kunci dalam vue untuk melihat apa kunci itu boleh digunakan!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!