zoukankan      html  css  js  c++  java
  • React / Vue 项目时在列表组件中的 key

    初始代码:

    <div id="app">
        <div v-for="i in dataList">{{ i }}</div>
    </div>
    var vm = new Vue({
      el: '#app',
      data: {
        dataList: [1, 2, 3, 4, 5]
      }
    })

    有无key一样:

     vm.dataList = [4, 1, 3, 5, 2] // 数据位置替换
    
     // 没有key的情况, 节点位置不变,但是节点innerText内容更新了
      [
        '<div>4</div>', // id: A
        '<div>1</div>', // id:  B
        '<div>3</div>', // id:  C
        '<div>5</div>', // id:  D
        '<div>2</div>'  // id:  E
      ]
    
      // 有key的情况,dom节点位置进行了交换,但是内容没有更新
      // <div v-for="i in dataList" :key='i'>{{ i }}</div>
      [
        '<div>4</div>', // id: D
        '<div>1</div>', // id:  A
        '<div>3</div>', // id:  C
        '<div>5</div>', // id:  E
        '<div>2</div>'  // id:  B
      ]

    有key反倒不是太好:

      vm.dataList = [3, 4, 5, 6, 7] // 数据进行增删
    
      // 1. 没有key的情况, 节点位置不变,内容也更新了
      [
        '<div>3</div>', // id: A
        '<div>4</div>', // id:  B
        '<div>5</div>', // id:  C
        '<div>6</div>', // id:  D
        '<div>7</div>'  // id:  E
      ]
    
      // 2. 有key的情况, 节点删除了 A, B 节点,新增了 F, G 节点
      // <div v-for="i in dataList" :key='i'>{{ i }}</div>
      [
        '<div>3</div>', // id: C
        '<div>4</div>', // id:  D
        '<div>5</div>', // id:  E
        '<div>6</div>', // id:  F
        '<div>7</div>'  // id:  G
      ]
  • 相关阅读:
    Redis主从复制
    Redis发布订阅
    Redis持久化
    初探redis.config
    java连接Linux服务器问题
    Redis常见类型及API
    Redis安装
    Nosql
    JMM
    SpringSecurity
  • 原文地址:https://www.cnblogs.com/anbozhu7/p/11249288.html
Copyright © 2011-2022 走看看