React项目运行出现相同key警告,求助错误原因及解决方法
React列表key重复报错原因分析
报错核心提示:Warning: Encountered two children with the same key,
0
- 你的代码中使用
m.id作为列表<li>元素的key属性,React要求同层级列表元素的key必须唯一,出现这个报错的根本原因是后端接口返回的movies数组中,存在至少两条数据的id字段值为0,出现了重复。 - 你可以先在接口请求的第二个then回调里加一行日志
console.log(json.movies),刷新页面后在控制台查看返回的数组,确认是否有重复id的条目。 - 临时修复方案:如果暂时无法调整后端接口的返回值,可以在map遍历的时候取索引和id拼接作为key,修改渲染部分的代码如下:
{movies.map((m, index) => ( <li key={`${m.id}-${index}`}> <Link to={`/movies/${m.id}`}>{m.title}</Link> </li> ))}
注意:该方案仅做临时验证使用,列表有增删、排序操作时索引不稳定,会影响React的diff性能,最优解是要求后端保证每条movie数据的id全局唯一
- 额外代码问题排查:你的接口请求逻辑里存在一处类型判断错误,
response.status是数字类型,你用!== "200"和字符串做恒等判断,无论接口返回什么状态码都会触发错误逻辑,需要修改为if (response.status !== 200)。
内容的提问来源于stack exchange,提问作者Brojan
相关产品推荐
相关产品推荐

