React中利用map批量渲染组件的key的唯一性

案例:

this.state={
  a: ['title', 'link', 'price']
}
...
const a = this.state.a
render(){
  return (
    {
      a.map((i, j) => (
        <div key={j} onClick={//点击后可删除该div,并同步修改state中a的值}>{i}}</div>
      ))
    }

上述代码只要不是从末尾删除,就会出现渲染出来结果与实际state中数据对不上的情况。具体表现为,无论删除哪一个div,渲染结果都是删除最后一个

原因:

通过console.log()可以发现state中的数据确实已经更改了,而UI中数据没变,说明前length-1个元素未重新渲染。那么唯一可能是,React 的 diff 算法在判是否需要重新渲染组件时将key作为了标准。由于上面代码是以数组元素的序号作为key的,所以在diff时判断发现数组中少了一个元素,而前面的元素key没有变化,所以前length-1个元素不会重新渲染。

结论:

所以在批量渲染组件时,key要设置为与内容唯一相关的信息,如 id 等主键

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容