react中两条相同key的子元素会导致什么问题?

63 阅读1分钟

1.现象

  • 在表格中当出现两条key相同的子元素时,更新列表后,两条重复的key子元素中的一条会一直在界面上显示,无法消失;

更新前

image.png

更新后

image.png

2.原因

  • eact为了提高性能,会尝试复用具有相同key的元素而不是创建新的。这意味着如果两个元素的key相同且它们在更新前后位置变动,React可能错误地复用了其中一个元素的位置,而另一个可能由于逻辑错误没有被正确处理,导致看起来有一个元素“一直存在”。

3.React中diff的规则

  • react对于非list结构的新旧节点是逐层对比的
  • 对于list结构是先对比key,若key不同直接重新创建节点,若key相同在对比type(标签类型),如果type不同,重新创建节点,如果keytype相同,react才会基于旧节点结合新的props生成新节点