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

如何解决React列表渲染中缺少唯一key属性的单元测试警告

解决React列表元素缺少唯一key的警告问题

你的OperatingHoursList组件在生成营业时间列表时,没有给每个列表元素添加唯一的key属性,违反了React的列表渲染规则,因此出现警告。以下是具体的修改方案:

修改后的代码

function OperatingHoursList(props: OperatingHoursProps): JSX.Element {
  let provOperatingHoursList: JSX.Element[];

  if (props.operatingHours) {
    // 用map遍历生成元素数组,同时添加key
    provOperatingHoursList = props.operatingHours.map(
      ({ open, close }, index) => {
        const openTime = open;
        const closeTime = close;
        if (typeof openTime === "string" && typeof closeTime === "string") {
          // 优先使用数据中的唯一标识(如id)作为key,无唯一标识时用索引
          return (
            <div key={index} css={popupTimeText}>
              {`${timeFormatConversion(openTime)} - ${timeFormatConversion(closeTime)}`}
            </div>
          );
        }
        return null;
      }
    ).filter(Boolean); // 过滤无效的空元素
  } else {
    // 给Closed元素添加固定key
    provOperatingHoursList = [<div key="closed" css={popupTimeText}>Closed</div>];
  }

  return <div css={popupBottomTextTimeSection}>{provOperatingHoursList}</div>;
}

关键修改点说明

  • 替换遍历方式:用map替代forEach+数组push的写法,更符合React组件的编码习惯,同时能直接获取循环索引(或数据唯一标识)作为key。
  • 添加唯一key:
    • 营业时间项:如果operatingHours数组的每一项有自身的唯一标识(比如id字段),请把key={index}改成key={item.id},这是最优方案,能避免数组顺序变化时React出现渲染错误。
    • “Closed”元素:用固定字符串key="closed"作为唯一标识,因为这是单一元素,不会重复。
  • 过滤无效元素:添加filter(Boolean)过滤掉不符合条件时返回的null,避免数组中出现空元素影响渲染。

React要求列表元素必须有唯一key,目的是让React能精准识别每个元素的变化,提升列表渲染的性能和准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 17:12:51