react/vue中的key 复习整理

116 阅读2分钟

「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战

react/vue中的key有什么作用?key的内部原理?

虚拟DOM中key的作用:

  1. key值是虚拟DOM对象的标识, 作为列表中哪些元素被添加、被修改、被移除的辅助标志
  2. 如果状态中的数据发生变化时,react/vue会根据【新数据】生成【新的虚拟DOM】, 随后React/vue进行【新虚拟DOM】与【旧虚拟DOM】的diff比较,比较规则如下:

可分为找到相同key和未找到相同key时:

如果旧虚拟DOM中找到了与新虚拟DOM相同的key时:

  1. 如果虚拟DOM中内容没变, 就直接使用之前的真实DOM

  2. 如果虚拟DOM中内容变了, 就会生成新的真实DOM,随后替换掉页面中之前的真实DOM

如果旧虚拟DOM中未找到与新虚拟DOM相同的key值,就会根据数据创建新的真实DOM,渲染到新页面

用index作为key造成的后果:

  1. 如果对数据进行逆序删除、逆序添加等会破坏数据顺序操作: 就会造成没有必要的真实DOM更新,虽然界面效果没问题, 但是更新效率太低

  2. 如果数据结构中还包含有输入类的DOM,就会产生错误DOM更新造成界面有问题

什么时候可以用index作为key?

如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,使用index作为key是没有问题的

开发中怎么选择key:

  1. 使用每条数据的唯一标识作为key, 比如id、number等定义的唯一值
  2. 如果确定只是简单的展示数据不进行增删等操作,可以用index作为key(需要注意)
  3. key的值必须保证稳定性,除了唯一外还需要保证永远不会发生改变,因为当数据变更后,key值也有可能会发生改变,重新渲染,会引起性能浪费