<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • v-for的鍵值key

          2021-9-27    前端達(dá)人

          我們現(xiàn)在在使用v-for的時(shí)候、都必須會(huì)加上一個(gè)必要的key值,并且很多人會(huì)使用index來作為key,其實(shí)這樣是不太妥當(dāng)?shù)囊环N做法。那么v-for中的鍵值key到底有什么作用呢。請(qǐng)看:

          官方給出的解答

          當(dāng) Vue 正在更新使用 v-for 渲染的元素列表時(shí),它默認(rèn)使用“就地更新”的策略。如果數(shù)據(jù)項(xiàng)的順序被改變,Vue 將不會(huì)移動(dòng) DOM 元素來匹配數(shù)據(jù)項(xiàng)的順序,而是就地更新每個(gè)元素,并且確保它們?cè)诿總€(gè)索引位置正確渲染。這個(gè)類似 Vue 1.x 的 track-by="$index"。

          這個(gè)默認(rèn)的模式是高效的,但是只適用于不依賴子組件狀態(tài)或臨時(shí) DOM 狀態(tài) (例如:表單輸入值) 的列表渲染輸出。

          為了給 Vue 一個(gè)提示,以便它能跟蹤每個(gè)節(jié)點(diǎn)的身份,從而重用和重新排序現(xiàn)有元素,你需要為每項(xiàng)提供一個(gè)唯一 key attribute:

          
          
          1. <div v-for="item in items" v-bind:key="item.id">
          2. <!-- 內(nèi)容 -->
          3. </div>

          建議盡可能在使用 v-for 時(shí)提供 key attribute,除非遍歷輸出的 DOM 內(nèi)容非常簡單,或者是刻意依賴默認(rèn)行為以獲取性能上的提升。

          舉例

          
          
          1. <div v-for="(item,index) in list" :key="index"> {{item.name}}</div>
          2. list: [
          3. {
          4. id: 1,
          5. name: "name1",
          6. },
          7. {
          8. id: 2,
          9. name: "name2",
          10. },
          11. {
          12. id: 3,
          13. name: "name3",
          14. }
          15. ]

          這個(gè)場(chǎng)景如何我們不佳key vue 回直接報(bào)錯(cuò),所以大部分人都會(huì)使用index作為key的值

          如果我們?cè)谔砑右粋€(gè)數(shù)據(jù)

          
          
          1. list: [
          2. {
          3. id: 1,
          4. name: "name1",
          5. },
          6. {
          7. id: 2,
          8. name: "name2",
          9. },
          10. {
          11. id: 3,
          12. name: "name3",
          13. },
          14. {
          15. id: 4,
          16. name: "last",
          17. },
          18. ]

          此時(shí)前面3條數(shù)據(jù)直接服用之前的,新渲染最后一條數(shù)據(jù),此時(shí)index作為key沒有任何問題

          如何我們?cè)谥虚g添加一條

          
          
          1. list: [
          2. {
          3. id: 1,
          4. name: "name1",
          5. },
          6. {
          7. id: 2,
          8. name: "name2",
          9. }, {
          10. id: 4,
          11. name: "last",
          12. },
          13. {
          14. id: 3,
          15. name: "name3",
          16. }
          17. ]

          此時(shí)我們更新渲染的數(shù)據(jù) 通過index 定義key 進(jìn)行數(shù)據(jù)對(duì)比一下

          之前的數(shù)據(jù):

          中間插入之后的數(shù)據(jù) :

          由此可以發(fā)現(xiàn)除了第一條數(shù)據(jù)可以復(fù)用以為其余的3條數(shù)據(jù)都是需要重新渲染,因?yàn)閗ey的值發(fā)生了變化。

          這個(gè)時(shí)候就可以體現(xiàn)出一個(gè)效率的問題,只插入一條數(shù)據(jù),卻要從新渲染3條數(shù)據(jù)

          所以我們需要可以想辦法讓數(shù)組中不會(huì)變化的數(shù)據(jù)的key值也不變,所以不能通過index來設(shè)置key值,應(yīng)該設(shè)置一個(gè)唯一的id來標(biāo)識(shí)數(shù)據(jù)的唯一性;我們修改之后再來對(duì)比一下渲染的效率:

          之前的數(shù)據(jù):

          <div v-for="(item,index) in list" :key="item.id"> {{item.name}}</div>

          中間插入之后的數(shù)據(jù):

           對(duì)此對(duì)比發(fā)現(xiàn),只有一條數(shù)據(jù)發(fā)生改變,因?yàn)槠渌麛?shù)據(jù)的id 都沒有變、所以對(duì)應(yīng)的key也沒有發(fā)生改變。我們只需要渲染這一條新的數(shù)據(jù)就可以。 所以一般推薦使用id作為key值配合v-for使用

          總結(jié):

          Vue很大的一個(gè)特點(diǎn)就是雙向數(shù)據(jù)綁定,數(shù)據(jù)一旦改變,那么頁面就渲染新的數(shù)據(jù)呈現(xiàn)在頁面上。但是對(duì)于用v-for渲染的列表數(shù)據(jù)來說,數(shù)據(jù)量可能一般很龐大,而且我們經(jīng)常還要對(duì)這個(gè)數(shù)據(jù)進(jìn)行一些增刪改操作,而key的出現(xiàn)就是盡可能的回避這個(gè)問題,提高效率,如果我們給列表增加了一條數(shù)據(jù),頁面只渲染了這數(shù)據(jù)。




          藍(lán)藍(lán)設(shè)計(jì)建立了UI設(shè)計(jì)分享群,每天會(huì)分享國內(nèi)外的一些優(yōu)秀設(shè)計(jì),如果有興趣的話,可以進(jìn)入一起成長學(xué)習(xí),請(qǐng)掃碼藍(lán)小助,報(bào)下信息,藍(lán)小助會(huì)請(qǐng)您入群。歡迎您加入噢~~希望得到建議咨詢、商務(wù)合作,也請(qǐng)與我們聯(lián)系。

          分享此文一切功德,皆悉回向給文章原作者及眾讀者.

          轉(zhuǎn)自:csdn
          免責(zé)聲明:藍(lán)藍(lán)設(shè)計(jì)尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問題,請(qǐng)及時(shí)與我們?nèi)〉寐?lián)系,我們立即更正或刪除。

          藍(lán)藍(lán)設(shè)計(jì)m.sdgs6788.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)

          日歷

          鏈接

          個(gè)人資料

          存檔

          久久久久久午夜成人影院| 国产高潮久久免费观看| 伊人久久亚洲综合影院| 久久久久久久波多野结衣高潮 | 久久精品一区二区| 久久人妻无码中文字幕| 久久精品国产99久久久| 久久久噜噜噜久久| 精品久久久久久国产潘金莲| 久久久久久久国产免费看| 色妞色综合久久夜夜| 久久精品国产亚洲AV香蕉| 一级做a爰片久久毛片人呢| 国产欧美久久一区二区| 免费精品久久天干天干| 久久精品无码一区二区三区免费| 日本WV一本一道久久香蕉| 91超碰碰碰碰久久久久久综合| 97精品伊人久久久大香线蕉| 久久91精品国产91| 久久久久亚洲av成人无码电影| 狠狠色婷婷综合天天久久丁香 | 久久久久久夜精品精品免费啦| 亚洲欧美精品一区久久中文字幕| 久久线看观看精品香蕉国产| 久久久婷婷五月亚洲97号色| 99久久精品免费看国产| 久久久久无码精品国产不卡| 欧洲性大片xxxxx久久久| 99久久精品免费观看国产| 欧美大香线蕉线伊人久久| 99久久99久久精品国产片果冻| 久久人人爽人人爽人人av东京热 | 精品无码久久久久国产动漫3d| 国产高清国内精品福利99久久| 久久久久久免费一区二区三区 | 久久久国产视频| 久久精品国产亚洲av麻豆图片| 中文精品久久久久人妻| 久久天天躁狠狠躁夜夜不卡 | 久久国语露脸国产精品电影|