React Native使用Array.prototype.map渲染列表,id唯一仍报重复key错误如何解决?
报错原因与解决方案
你遇到的Warning: Encountered two children with the same key, [object Object]报错,核心原因是运行时你传给key的category.id不是字符串/数值等基础类型,而是对象类型:所有对象转为字符串时默认都会输出[object Object],只要有两个及以上元素的id是对象,就会被判定为key重复。你提供的示例数据id是合法的字符串,问题出在实际运行的Redux数据逻辑上。
常见触发场景
addCategoryaction生成新分类时,没有正确给id赋值为字符串,比如误把uuid生成实例、其他业务对象直接赋值给了id字段- 调整优先级的
increasePriority/decreasePriority对应reducer存在逻辑bug,不小心修改了原有分类的id字段,把它改写为对象 - Redux中
state.auth.categories的初始化逻辑有问题,部分初始元素的id字段本身就是对象类型
排查与修复步骤
- 先在map循环中加日志确认异常id来源:
categories.map((category, index) => { // 打印id的类型和实际值,定位是哪项的id出了问题 console.log(`索引${index}的id类型:${typeof category.id},值:`, category.id) // 原有渲染逻辑不变 })
- 检查所有修改categories数组的reducer逻辑(包括
addCategory、increasePriority、decreasePriority、deleteCategory、updateCategoryName),确认没有误改id字段的操作 - 临时验证可以先把key替换为
key={cate-${index}-${category.name}},确认报错消失后再定位id的异常问题
内容的提问来源于stack exchange,提问作者nachonate
相关产品推荐
相关产品推荐

