You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中组合uuid与item.id仍出现重复key警告,如何解决?

解决React列表Swiper组件重复key警告的方案

先确认key生成逻辑是否生效

你提到把uuid和item.id组合,但警告里出现的是.0这种格式,说明你的key生成代码大概率没正确执行。先检查:

  • 直接打印item.id,确认每个电影项的id确实存在且唯一
  • 检查key的写法,比如是不是写成了key={uuid() + item.id},如果item.id是undefined,就会导致key异常;另外不要用动态uuid,React官方不推荐——每次渲染生成新uuid会让组件失去身份标识,反而适得其反

直接用唯一的item.id当key

既然item.id是唯一值,完全没必要加uuid,直接写key={item.id}就行。动态生成的uuid会让React每次渲染都认为是新组件,既影响性能还可能引发其他问题。

检查Swiper的渲染层级

Swiper内部的嵌套渲染可能导致key冲突,比如:

  • 不要在Swiper外层额外套循环,确保只有SwiperSlide是循环渲染的项
  • 绝对不要用循环索引index当key,列表顺序变化时索引会重复,直接触发警告

示例正确写法:

<Swiper {...你的配置}>
  {moviesList.map(movie => (
    <SwiperSlide key={movie.id}>
      <div>{movie.title}</div>
    </SwiperSlide>
  ))}
</Swiper>

排查数据源是否有重复id

别想当然认为item.id唯一,用下面的代码快速验证:

const idSet = new Set(moviesList.map(item => item.id));
console.log(idSet.size === moviesList.length); // 输出true才说明id全唯一

如果输出false,说明数据源里有重复id,先去重或者修正数据。

强制key为字符串类型

如果还是有问题,把key转成字符串避免类型冲突:

<SwiperSlide key={String(movie.id)}>

检查Swiper版本

部分旧版Swiper存在内部key处理的bug,试试升级到最新稳定版,或者查看官方文档的渲染说明。

内容的提问来源于stack exchange,提问作者user19715801

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:35:22