当前位置:   article > 正文

【Vue】v-for中:key中item.id与Index使用的区别

【Vue】v-for中:key中item.id与Index使用的区别

先说结论,推荐使用【:key="item.id"】而不是将数组下标当做唯一标识,前者能做到全部复用

场景:删除无序列表中的<li>标签

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>创建一个Vue实例</title>
  7. <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
  8. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
  9. <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/mhDoLbDldZc3qpsJHpLogda//BVZbgYuw6kof4u2FrCedxOtgRZDTHgHUhOCVim" crossorigin="anonymous"></script>
  10. </head>
  11. <body>
  12. <div class="container">
  13. <div id="app">
  14. <!--
  15. 事件:做<li>标签的删除功能,根据class的id删除,
  16. 此案例删除class="3"的标签
  17. -->
  18. <!-- 原代码 -->
  19. <li class="1">1</li>
  20. <li class="2">2</li>
  21. <li class="3">3</li>
  22. <li class="4">4</li>
  23. <li class="5">5</li>
  24. <!-- 1.使用item.id做:key唯一标识符 -->
  25. <!-- 删除3后,变成 -->
  26. <li class="1">1</li>
  27. <li class="2">2</li>
  28. <li class="4">4</li>
  29. <li class="5">5</li>
  30. <!-- vue开始将剩下的四个<li>与源代码的五个<li>进行匹配
  31. 使用的是diff算法对比新旧虚拟DOM
  32. 由于精准删除3,1和2直接代码复用,4和5发现class和内容均能匹配上
  33. 将class重新排列 1234
  34. 则映射出新的组合,如下:
  35. -->
  36. <li class="1">1</li>
  37. <li class="2">2</li>
  38. <li class="3">4</li>
  39. <li class="4">5</li>
  40. <!-- ========================================================================= -->
  41. <!-- 2.使用index做:key唯一标识符 -->
  42. <!-- 删除3后,index数组下标会发生改变,变成 -->
  43. <li class="1">1</li>
  44. <li class="2">2</li>
  45. <li class="3">4</li>
  46. <li class="4">5</li>
  47. <!-- Vue将内容为4的li与内容为3的对比,发现匹配不上,删除3标签
  48. 再将内容为5的li与内容为4的对比,也匹配不上,又删除4标签 -->
  49. <!-- ========================================================================-->
  50. <!-- 总结:使用index很多情况不能代码复用,强制更新元素,影响性能 -->
  51. </div>
  52. </div>
  53. <script>
  54. const app = new Vue({
  55. el: '#app',
  56. data:{
  57. },
  58. methods:{
  59. }
  60. })
  61. </script>
  62. </body>
  63. </html>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/121690
推荐阅读
相关标签
  

闽ICP备14008679号