1.现象
- 在表格中当出现两条key相同的子元素时,更新列表后,两条重复的key子元素中的一条会一直在界面上显示,无法消失;
更新前:
更新后:
2.原因
- eact为了提高性能,会尝试复用具有相同
key的元素而不是创建新的。这意味着如果两个元素的key相同且它们在更新前后位置变动,React可能错误地复用了其中一个元素的位置,而另一个可能由于逻辑错误没有被正确处理,导致看起来有一个元素“一直存在”。
3.React中diff的规则
- react对于非list结构的新旧节点是逐层对比的
- 对于list结构是先对比
key,若key不同直接重新创建节点,若key相同在对比type(标签类型),如果type不同,重新创建节点,如果key和type相同,react才会基于旧节点结合新的props生成新节点