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

React列表key属性警告排查求助:已添加key仍报错

定位React列表key警告的问题

以下是你代码中触发Warning: Each child in a list should have a unique "key" prop.警告的具体问题及修复方案:

1. 嵌套benefits循环缺少key

第一个map循环内部,item.benefits.map渲染<CardItem>时未添加key prop:

{item.benefits.map(benefitsItem => (
  <CardItem key={benefitsItem}> {/* 新增唯一key,若benefitsItem可能重复,建议使用专属id字段 */}
    <CheckCircleIcon />
    <CardItemText>{benefitsItem}</CardItemText>
  </CardItem>
))}

2. renderCard函数的两处问题

2.1 map循环存在无key的undefined项

cards.map(item => renderCard(item))中,renderCard仅在cardData.cardId === activeCard时返回组件,其余情况返回undefined。React会将数组中的undefined视为列表子元素,这类元素无key,触发警告。

修复方案:先过滤不符合条件的项再执行map:

<CardsWrapper>
  {cards
    .filter(item => item.cardId === activeCard)
    .map(item => renderCard(item))}
</CardsWrapper>

2.2 opportunities循环缺少key

renderCard内部的cardData.cardOpportunities.map渲染<Plus>时未添加key:

{cardData.cardOpportunities && cardData.cardOpportunities.map(opportunity => (
  <Plus key={opportunity}> {/* 新增唯一key,重复场景建议用专属id */}
    <Ok><CheckCircleIcon /></Ok>
    {opportunity}
  </Plus>
))}

2.3 key的位置不符合规范

你将key加在了renderCard返回的<Card>组件上,正确的key应直接绑定在map循环的顶级元素上。调整后示例:

<CardsWrapper>
  {cards
    .filter(item => item.cardId === activeCard)
    .map(item => (
      <Card key={item.cardId}>
        {/* 原Card内部内容 */}
      </Card>
    ))}
</CardsWrapper>

3. renderLinks函数的key位置优化

虽然renderLinks返回的<div>已加key,但更规范的做法是将key直接绑定在map循环的调用处,避免函数内部key被React忽略:

<Navigation>
  {cards.map(item => (
    <React.Fragment key={item.cardId}>
      {renderLinks(item)}
    </React.Fragment>
  ))}
</Navigation>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:15:36