久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

vue的key是什么

在vue中,key是DOM對象的標識,是給每一個vnode的唯一id,也是diff的一種優化策略;可以根據key,更準確、 更快的找到對應的vnode節點。如果數據只做展示使用,可以使用index作為key;如果使用index作為key,而后續操作會破壞順序,一定會帶來效率問題,嚴重時會渲染出錯誤的DOM。

vue的key是什么

前端(vue)入門到精通課程,老師在線輔導:聯系老師
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

本教程操作環境:windows7系統、vue3版,DELL G3電腦。

1. key是什么

  • key在Vue是DOM對象的標識;key是給每一個vnode的唯一id,也是diff的一種優化策略,可以根據key,更準確, 更快的找到對應的vnode節點。
  • 進行列表展示時,默認key是index。
  • 如果數據只做展示使用,使用index作為key是沒有任何問題的。
  • 如果使用index作為key,而后續操作會破壞順序,一定會帶來效率問題,嚴重時會渲染出錯誤的DOM。

關于key的作用及實現原理,下面一一道來。

2. key的作用

key就是一個標識,被使用在Vue中。再詳細一點,key被使用在Vue中的虛擬DOM中,并不會出現在真實DOM中。

2.1 舉一個例子

以列表的形式展示一組人員信息

<!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>key的原理</title>      <!--引入vue-->     <script type="text/javascript" src="../js/vue.js"></script>      </head> <div id="root">     <h2>人員列表</h2>     <ul>         <li v-for="(p,index) in persons">             {{p.name}}-{{p.age}}         </li>     </ul> </div> <body>     <script type="text/javascript">         const vm = new Vue({             el:'#root',             data:{                 persons:[                     {'id':'001', 'name':'張三','age':'18'},                     {'id':'002', 'name':'李四','age':'19'},                     {'id':'003', 'name':'王五','age':'20'}                 ]             }         })     </script> </body> </html>
登錄后復制

這個html文件在瀏覽器中打開如下圖所示。

vue的key是什么

而上述示例html文件中并沒有使用到key,似乎也沒有問題。當然,單純地展示數據,不寫key是不會存在問題的。【學習視頻分享:vue視頻教程、web前端視頻】

現在我們為上述示例加上key,這里以每條數據的id為key

<li v-for="(p,index) in persons" :key="p.id">     {{p.name}}-{{p.age}} </li>
登錄后復制

加上key的展示結果和上圖結果一模一樣。

vue的key是什么

而如果我們在瀏覽器上查看元素,不會看到key的存在。

vue的key是什么

截至目前,我們可以得到兩個結論:1. 只做數據展示用,不寫key是沒有任何影響的;2.key不會出現在真實DOM中

實際上,即使不寫key,Vue在生成真實DOM時,也用到了key,默認是數據索引(index)

我們把key替換為index,展示的數據不會產生任何改變。

<li v-for="(p,index) in persons" :key="index"> 	{{p.name}}-{{p.age}} </li>
登錄后復制

2.2 修改一下上述示例

在展示人員信息的基礎上顯示索引,并且添加一個按鈕,功能是在頭部添加人員信息

對上述html文件稍加修改。

<!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>key的原理</title>      <!--引入vue-->     <script type="text/javascript" src="../js/vue.js"></script>     <link rel="icon" href="../favicon.ico" type="image/x-icon" />  </head> <div id="root">     <h2>人員列表</h2>     <button @click="add">添加一個老劉</button>     <ul>         <li v-for="(p,index) in persons" :key="index">             {{p.name}}-{{p.age}}-{{index}}         </li>     </ul> </div> <body>     <script type="text/javascript">         const vm = new Vue({             el:'#root',             data:{                 persons:[                     {'id':'001', 'name':'張三','age':'18'},                     {'id':'002', 'name':'李四','age':'19'},                     {'id':'003', 'name':'王五','age':'20'}                 ]             },             methods:{                 add(){                     const p = {'id':'004', 'name':'老劉','age':'40'}                     this.persons.unshift(p)                 }             }         })     </script> </body> </html>
登錄后復制

我們可以看到,張三、李四、王五的索引分為別0,1,2

vue的key是什么

點擊按鈕,添加一個新人物,這個時候索引發生了變化,新添加的人物“老劉”變為了索引0,似乎對,也似乎不對

vue的key是什么

當然,單純地討論索引,這里一點問題也沒有,下面舉一個新例子,來說說“不對“在哪里

2.3 再修改一下示例

不展示索引了,改為輸入框,在每個人物后面的輸入框內寫上人物的姓,觀察新插入數據后原始數據的變化

稍微修改一下html

<li v-for="(p,index) in persons" :key="index">     {{p.name}}-{{p.age}}     <input type="text"> </li>
登錄后復制

實際效果就是下圖這樣

vue的key是什么

到這里,似乎沒有什么不對,接下來就是見證奇跡的時刻

添加老劉,出現了問題,和我們預想的不一樣。

vue的key是什么

這是key為index的情況,如果修改為數據的唯一標識,則不會產生這樣的問題。

<li v-for="(p,index) in persons" :key="p.id">     {{p.name}}-{{p.age}}     <input type="text"> </li>
登錄后復制

誒,這就是我們想要的。

vue的key是什么
列表內有輸入內容,后續操作破壞了原始順序,如果以index作為key,就會產生錯誤DOM

3. key的實現原理

要解釋key的實現原理,就要引入Vue一個十分重要的概念——【虛擬DOM】。

給出一組數據,Vue要把這些數據渲染到頁面上,首先要生成【虛擬DOM】,然后根據【虛擬DOM】去生成【真實的DOM】。如果數據發生了改變,Vue會生成【新的虛擬DOM】,注意,這個【新的虛擬DOM】并不會直接生成【新的真實DOM】,否則虛擬DOM一點用處也沒有了。Vue的操作是,拿根據新的數據生成的【新的虛擬DOM】與之前的【真實的DOM】去做比較,如果相同,直接延用即可(“拿來主義”);如果不同,則生成新的DOM對象。

在這個過程中key扮演了很重要的角色

根據最后一個示例進行剖析。

3.1 key為index的情況

根據數據生成【真實DOM】的流程如下:(注意,下圖的真實DOM中輸入框里的內容為生成頁面后手動添加)

vue的key是什么

然后,添加人物“老劉”,獲取到一組新數據

vue的key是什么

Vue拿新數據生成【新的虛擬DOM】

vue的key是什么

在生成真實DOM,就需要用新生成的虛擬DOM和原來的真實DOM作比較(一條一條分析)

vue的key是什么

對比第一條,key為0,找到舊DOM中key為0的數據,發現“老劉-40”和“張三-18”不同,渲染新的數據“老劉-40”到頁面上;再往后,發現同為輸入框,不必重新渲染,直接使用原來真實DOM的內容。第一條內容就出現了,而這個輸入框還攜帶有張三的姓。

vue的key是什么

對比第二條,key為1,找到舊DOM中key為1的數據,發現“張三-18”和“李四-19”不同,渲染新的數據“張三-18”到頁面上;再往后,發現同為輸入框,不必重新渲染,直接使用原來真實DOM的內容。第二條內容就出現了,而這個輸入框還攜帶有李四的姓。

vue的key是什么

之后同理。

回顧這個過程,key是作為虛擬DOM中對象的唯一標識,標識出了數據的“身份信息”,Vue在虛擬DOM中會根據這個“身份標識”去對比內容,設計的初衷是為了節省資源開支,不必渲染重復的部分。在本示例中,不但帶來了效率問題,還渲染出了錯誤的DOM,后果非常嚴重。

3.2 key為id的情況

直接進入添加“老劉”后的新舊DOM對比。

vue的key是什么

對比第一條,key為‘004’,發現在舊DOM中并不存在,直接生成“老劉-40”和新的輸入框。

對比第二條,key為‘001’,發現舊DOM中key為‘001’的數據相同,直接將“張三-18”和輸入框拿過來使用。

……

最后生成正確的DOM,節省了資源開支。

3.3 總結

推薦使用數據的唯一標識作為key,比如id,身份證號,手機號等等,通常這些數據由后端提供。

后續操作不破壞原來數據順序的話,使用index作為key也沒有任何問題。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
另类小说一区二区三区| 亚洲欧洲av| 美女av一区| 精品免费av| 日本在线啊啊| 999国产精品999久久久久久| 日韩欧美国产精品综合嫩v| 黄毛片在线观看| 欧美亚洲在线日韩| 在线视频精品| 日韩中文字幕不卡| 男女男精品网站| 亚洲精品免费观看| 国产日产精品_国产精品毛片 | 欧洲精品一区二区三区| 成人免费电影网址| 亚洲少妇在线| 国产亚洲精品美女久久| 国产高清亚洲| bbw在线视频| 午夜久久黄色| 日韩三区四区| 国产成人精选| 99国产精品私拍| 91精品国产一区二区在线观看| 精品网站999| 欧美日一区二区| 中文字幕亚洲精品乱码| 国产精选久久| 日韩国产欧美| 六月丁香综合| 国产精品久久免费视频| 欧美日韩精品免费观看视欧美高清免费大片 | 久久精品一本| 国产高清一区| 日韩中文字幕在线一区| 久久这里只有| 欧美不卡高清| 日韩专区视频网站| 国产一区二区亚洲| 狠狠久久婷婷| 精品黄色一级片| 99亚洲视频| 精品视频自拍| 久久午夜精品| 国产成人免费精品| 综合激情五月婷婷| 国产一区二区三区国产精品| 久久夜色精品| 日本欧美国产| 午夜久久av | 日本综合视频| 欧美成人精品三级网站| 日韩三级精品| 成人羞羞视频播放网站| 久久精品99国产精品| 秋霞影院一区二区三区| 91欧美极品| 伊人成人网在线看| 精品久久精品| 日韩欧美中文字幕在线视频| 欧美午夜精品一区二区三区电影| 国产日产一区| 丝袜亚洲另类欧美| 粉嫩av一区二区三区四区五区 | 人在线成免费视频| 日韩国产在线不卡视频| 日韩国产网站| 国产精品一区二区99| 黄色成人91| 青青青免费在线视频| 欧美片第1页综合| 日韩视频不卡| 伊伊综合在线| 国产伦精品一区二区三区视频| 91超碰国产精品| 四虎国产精品免费观看| 日韩黄色av| 老鸭窝毛片一区二区三区| 婷婷综合六月| 成人在线观看免费视频| 日韩av影院| 在线精品视频一区| 1024精品久久久久久久久| 天堂中文av在线资源库| 国产高清亚洲| 欧美亚洲免费| 日韩中文av| 亚洲在线观看| 亚洲a一区二区三区| 精品入口麻豆88视频| 日本成人中文字幕| 蜜臀av一区二区三区| 精品一区欧美| 999精品色在线播放| 国产精品yjizz视频网| 国产精品国产三级在线观看| 日韩综合小视频| 蜜桃视频一区二区三区在线观看 | 亚洲精品福利| 香蕉成人久久| 亚洲天堂一区二区| 国模精品一区| 精品无人区麻豆乱码久久久| 国产精品天堂蜜av在线播放| 奇米色欧美一区二区三区| 蜜臀久久99精品久久久久久9| 在线 亚洲欧美在线综合一区| 99热国内精品| 99久久久久| 亚洲福利一区| 婷婷国产精品| 亚洲特色特黄| 亚洲无线一线二线三线区别av| 久久久人人人| 欧美亚洲国产一区| 日韩精品免费一区二区三区| 亚洲精品**中文毛片| 国产一区二区三区四区五区| 欧美精品导航| 久久精品亚洲| av在线最新| 欧美sm一区| 国户精品久久久久久久久久久不卡| 99久久亚洲精品| 五月天久久久| 奶水喷射视频一区| 亚洲免费资源| 日韩一区二区三免费高清在线观看| 亚洲久久视频| 91午夜精品| 国产精品99久久免费| 国产精品网址| 久草免费在线视频| 国产中文一区| 久久aⅴ国产紧身牛仔裤| 免费成人av在线播放| 日韩av电影一区| 国产精品麻豆成人av电影艾秋 | 免费av一区二区三区四区| 91九色精品| 水野朝阳av一区二区三区| 日韩1区2区3区| 久久不卡日韩美女| 国产999精品在线观看| 伊人久久在线| 99riav1国产精品视频| 午夜久久av| 欧美国产免费| 久久三级视频| 蜜桃传媒麻豆第一区在线观看| 久久国产乱子精品免费女| 高清一区二区三区av| 久久一区二区三区喷水| 蜜臀va亚洲va欧美va天堂| 国产乱码精品一区二区三区亚洲人| 国产在线视频欧美一区| 欧美日韩国产传媒| 日本中文字幕视频一区| 国产精品a级| 久久夜夜操妹子| 免费视频一区二区| 免费亚洲婷婷| 免费国产自久久久久三四区久久| 免费成人av在线播放| 国产精品亚洲欧美一级在线| 久久久蜜桃一区二区人| 少妇精品久久久一区二区| 精品久久久久中文字幕小说| 一区二区自拍| 欧美激情aⅴ一区二区三区| 久久国产中文字幕| 午夜久久av | 日本韩国欧美超级黄在线观看| 免费黄网站欧美| 久久精品五月| 国产亚洲精品久久久久婷婷瑜伽| 久久国产日韩欧美精品| 91精品国产91久久久久久黑人| 日韩精品视频网| 久久精品国产68国产精品亚洲| 日本午夜精品久久久| 久久精品国产99久久| 国产欧美一区二区三区国产幕精品 | 免费人成黄页网站在线一区二区| 国产乱人伦精品一区| 国产一区清纯| 国产精品**亚洲精品| 国产亚洲一区在线| 精品久久亚洲| 日韩综合一区二区三区| 久久中文字幕av一区二区不卡| 国产欧美一区二区色老头| 亚洲精品99| 精品美女视频| 日本国产一区| 尤物精品在线| 美女一区网站| 国产精品亚洲四区在线观看| 国产精品试看|