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
相关产品推荐
相关产品推荐

