React、Vue中key的作用詳解 (key的內(nèi)部原理解析)
1. 虛擬DOM中key的作用:
key是虛擬DOM對象的標(biāo)識,當(dāng)狀態(tài)中的數(shù)據(jù)發(fā)生變化時(shí),Vue會根據(jù)[新數(shù)據(jù)]生成[新的虛擬DOM]
隨后Vue進(jìn)行[新虛擬DOM]與[舊虛擬DOM]的差異比較,比較規(guī)則如下:
2. 對比規(guī)則:
(1).舊虛擬DOM中找到了與新虛擬DOM相同的key:
①.若虛擬DOM中內(nèi)容沒變,直接使用之前的真實(shí)DOM!
②.若虛擬DOM中內(nèi)容變了,則生成新的真實(shí)DOM,隨后替換掉頁面中之前的真實(shí)DOM。
(2).舊虛擬DOM中未找到與新虛擬DOM相同的key創(chuàng)建新的真實(shí)DOM,隨后渲染到到頁面。
3. 用index作為key可能會引發(fā)的問題:
(1).若對數(shù)據(jù)進(jìn)行: 逆序添加、逆序刪除等破壞順序操作:
會產(chǎn)生沒有必要的真實(shí)DOM更新 ==> 界面效果沒問題,但效率低
(2).如果結(jié)構(gòu)中還包含輸入類的DOM:
會產(chǎn)生錯(cuò)誤DOM更新 ==> 界面有問題
4. 開發(fā)中如何選擇key?
(1).最好使用每條數(shù)據(jù)的唯一標(biāo)識作為key,比如id、手機(jī)號、身份證號、學(xué)號等唯一值。
(2).如果不存在對數(shù)據(jù)的逆序添加、逆序刪除等破壞順序操作,僅用于渲染列表用于展示,
使用index作為key是沒有問題的。


<body>
<div id="root">
<h2>人員列表</h2>
<button @click="add_liu">點(diǎn)擊添加一個(gè)老劉</button>
<ul>
<!-- <li v-for='p in persons' :key="p.id"> -->
<li v-for='p in persons' :key="index">
{{p.name}} - {{p.age}} <input type="text">
</li>
</ul>
</div>
</body>
<script>
let vm = new Vue({
el: "#root",
data:{
persons: [
{
id: '001',
name: "張三",
age: 18,
},
{
id: '002',
name: "李四",
age: 19,
},
{
id: '003',
name: "王五",
age: 20,
}
],
},
methods: {
add_liu: function(){
const liu =
{
id: '004',
name: "老劉",
age: 30,
}
this.persons.unshift(liu)
}
},
})
</script>到此這篇關(guān)于React、Vue中key的作用詳解 (key的內(nèi)部原理解析)的文章就介紹到這了,更多相關(guān)react vue key作用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
react 應(yīng)用多入口配置及實(shí)踐總結(jié)
這篇文章主要介紹了react 應(yīng)用多入口配置及實(shí)踐總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10
react axios配置代理(proxy),如何解決本地開發(fā)時(shí)的跨域問題
這篇文章主要介紹了react axios配置代理(proxy),如何解決本地開發(fā)時(shí)的跨域問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
React-redux實(shí)現(xiàn)小案例(todolist)的過程
這篇文章主要為大家詳細(xì)介紹了React-redux實(shí)現(xiàn)小案例(todolist)的過程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
react實(shí)現(xiàn)keep-alive功能
React無內(nèi)置keep-alive,可通過父組件狀態(tài)緩存、React Router自定義緩存、第三方庫(如react-keep-alive)實(shí)現(xiàn),接下來通過本文給大家詳細(xì)介紹react實(shí)現(xiàn)keep-alive功能的詳細(xì)過程,感興趣的朋友一起看看吧2025-08-08
React+Vite中利用Fetch將CSV數(shù)據(jù)轉(zhuǎn)成JSON字符串
在一些小型項(xiàng)目中,前端可能需要直接處理 CSV 文件數(shù)據(jù),將其轉(zhuǎn)換為 JSON 字符串后再進(jìn)行邏輯操作和展示,本文將會介紹兩種方法,需要的朋友可以參考下2025-12-12
react事件回調(diào)中使用防抖失敗的常見錯(cuò)誤和正確使用方式
這篇文章主要介紹了react事件回調(diào)中使用防抖失敗的常見錯(cuò)誤和正確使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06

