React、Vue中key的作用詳解 (key的內(nèi)部原理解析)
1. 虛擬DOM中key的作用:
key是虛擬DOM對(duì)象的標(biāo)識(shí),當(dāng)狀態(tài)中的數(shù)據(jù)發(fā)生變化時(shí),Vue會(huì)根據(jù)[新數(shù)據(jù)]生成[新的虛擬DOM]
隨后Vue進(jìn)行[新虛擬DOM]與[舊虛擬DOM]的差異比較,比較規(guī)則如下:
2. 對(duì)比規(guī)則:
(1).舊虛擬DOM中找到了與新虛擬DOM相同的key:
①.若虛擬DOM中內(nèi)容沒變,直接使用之前的真實(shí)DOM!
②.若虛擬DOM中內(nèi)容變了,則生成新的真實(shí)DOM,隨后替換掉頁(yè)面中之前的真實(shí)DOM。
(2).舊虛擬DOM中未找到與新虛擬DOM相同的key創(chuàng)建新的真實(shí)DOM,隨后渲染到到頁(yè)面。
3. 用index作為key可能會(huì)引發(fā)的問題:
(1).若對(duì)數(shù)據(jù)進(jìn)行: 逆序添加、逆序刪除等破壞順序操作:
會(huì)產(chǎn)生沒有必要的真實(shí)DOM更新 ==> 界面效果沒問題,但效率低
(2).如果結(jié)構(gòu)中還包含輸入類的DOM:
會(huì)產(chǎn)生錯(cuò)誤DOM更新 ==> 界面有問題
4. 開發(fā)中如何選擇key?
(1).最好使用每條數(shù)據(jù)的唯一標(biāo)識(shí)作為key,比如id、手機(jī)號(hào)、身份證號(hào)、學(xué)號(hào)等唯一值。
(2).如果不存在對(duì)數(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React中使用Echarts無(wú)法顯示title、tooltip等組件的解決方案
這篇文章主要介紹了React中使用Echarts無(wú)法顯示title、tooltip等組件的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03flouting?ui定位組件完美替代ant?deisgn使用詳解
這篇文章主要為大家介紹了flouting?ui定位組件完美替代ant?deisgn使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11react中的useContext具體實(shí)現(xiàn)
useContext是React提供的一個(gè)鉤子函數(shù),用于在函數(shù)組件中訪問和使用Context,useContext的實(shí)現(xiàn)原理涉及React內(nèi)部的機(jī)制,本文給大家介紹react中的useContext具體實(shí)現(xiàn),感興趣的朋友一起看看吧2023-11-11react-router-dom6(對(duì)比?router5)快速入門指南
這篇文章主要介紹了快速上手react-router-dom6(對(duì)比?router5),通過本文學(xué)習(xí)最新的react-router-dom?v6版本的路由知識(shí),并且會(huì)與v5老版本進(jìn)行一些對(duì)比,需要的朋友可以參考下2022-08-08ReactNative頁(yè)面跳轉(zhuǎn)實(shí)例代碼
這篇文章主要介紹了ReactNative頁(yè)面跳轉(zhuǎn)的代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09antd?table動(dòng)態(tài)修改表格高度的實(shí)現(xiàn)
本文主要介紹了antd?table動(dòng)態(tài)修改表格高度的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07