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

React列表子元素需唯一key prop警告,找不到缺失key的位置

错误根源

你在遍历contract.features生成功能列表时,map回调返回的顶级元素是<ul>,但你仅给内部的<li>添加了key属性,map生成的每一个<ul>节点本身没有配置唯一key,这就是触发警告的原因。

问题代码片段

feature={
  contract.features.map((feature, index) => 
    // 此处ul是map生成的直接子节点,未加key
    <ul role="list" className="mt-6 space-y-6">
      <li className="flex" key={feature.id} >
        {console.log(feature.id)}
        <CheckIcon className="flex-shrink-0 w-6 h-6 text-yellow-500" aria-hidden="true" />
        {feature.name}
      </li>
    </ul>
)}

修复方案

方案1(快速修复)

将key属性移到<ul>标签上即可:

feature={
  contract.features.map((feature, index) => 
    <ul role="list" className="mt-6 space-y-6" key={feature.id}>
      <li className="flex" >
        {console.log(feature.id)}
        <CheckIcon className="flex-shrink-0 w-6 h-6 text-yellow-500" aria-hidden="true" />
        {feature.name}
      </li>
    </ul>
)}

方案2(优化语义结构,更推荐)

你当前的写法会给每个功能项都单独包裹一个<ul>列表容器,语义不合理,建议把<ul>提至map外层,仅循环生成<li>节点,从结构层面避免同类问题:

feature={
  <ul role="list" className="mt-6 space-y-6">
    {contract.features.map((feature) => (
      <li className="flex" key={feature.id}>
        <CheckIcon className="flex-shrink-0 w-6 h-6 text-yellow-500" aria-hidden="true" />
        {feature.name}
      </li>
    ))}
  </ul>
}

额外优化提示

你当前内外两层map遍历都用了同名的index参数,存在变量作用域冲突风险,建议将内层map的参数重命名为featureIndex避免潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:06:01