Warning: Each child in a list should have a unique “key” prop

前言

Bug:Warning: Each child in a list should have a unique “key” prop。你真的理解了吗?
相信很多人都是这样写代码的:
this.state.arr.map((item, index)=>{return <div key={index} ></div>})
如果这个组件数组不用涉及删除的话,你这样写是对的。但是如果涉及到删除其中的某个组件的话,就会出现不可思议的错误了。

背景:最近在用react开发时,有这样一个需求:数组中存储值,渲染前先将数组的值通过map函数引射为一个组件的数组,再对组件数组进行渲染。可是出现了这样一个很不可思议的错误:删除数组中非末尾的一个值时,组件实际渲染出来后不是想要的结果,也就是:本来应该删除掉的还在,而不应该被删除却被删除了。下面通过一个实例解释原因。

项目实例

渲染结果展示

  1. 初始的样子
    解释:这六个组件,如果点击叉号的话就会删除对应的组件
    渲染的结果图片
    2.点击组件"1"时:我们可以看见:被删除并不是“1”,而是“6”!这跟我们预期不一致!
    在这里插入图片描述

代码展示

  1. 存储值的数组
    constructor(props){
   
        super(props);
        this.onCloseButtonClick = this.onCloseButtonClick.bind(this)
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值