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

React使用UUID作为key仍报Each child需唯一key prop错误,求解决

解决React列表"Each child in a list should have a unique 'key' prop"报错

问题根源

你遇到的报错,核心原因是**map迭代返回的最外层元素(即你使用的<>短语法Fragment)没有添加唯一key**。React要求列表中每个被迭代生成的顶级元素必须拥有唯一key,而非仅给内层子元素加key——你给两个Dropdown.Item加了key,但这并不能满足React对列表项顶级元素的key要求。

另外,报错指向<Dropdown.Menu>是React的常见提示逻辑:它会把列表容器元素作为报错位置,而非直接指向缺失key的迭代元素。

解决方案

  1. 给迭代的顶级Fragment添加唯一key
    将短语法<>替换为完整的<React.Fragment>,并为其添加key。优先使用数据中已有的唯一标识(比如你数组里的item[0],值为0、1、2,完全唯一),而非uuid.v4()——后者每次渲染都会生成新值,会导致React频繁重渲染列表项,影响性能。

    修改后的代码示例:

    <Dropdown.Menu variant="dark">
      {
        [
          [0, "prod_name", "Name"],
          [1, "price", "Price"],
          [2, "average_rating", "Rating"],
        ].map((item, i) => (
          <React.Fragment key={item[0]}>
            <Dropdown.Item
              as={Button}
              onClick={() => {
                this.setState({ sort: item[0], open: false });
                this.context.sort(item[1], "asc");
              }}
              className={
                this.state.sort === item[0]
                  ? "text-black giBold active"
                  : "text-light"
              }
            >
              {item[2] + " (ascending)"}
            </Dropdown.Item>
            <Dropdown.Item
              as={Button}
              onClick={() => {
                this.setState({ sort: item[0] + 3, open: false });
                this.context.sort(item[1], "desc");
              }}
              className={
                this.state.sort === item[0] + 3
                  ? "text-black giBold active"
                  : "text-light"
              }
            >
              {item[2] + " (descending)"}
            </Dropdown.Item>
          </React.Fragment>
        ))
      }
    </Dropdown.Menu>
    
  2. 避免使用uuid.v4()作为列表项key
    动态生成的uuid会在每次组件渲染时改变,React会因此判定所有列表项都是新元素,触发不必要的卸载和重新挂载,降低组件性能。使用数据本身的唯一标识(如item[0])或稳定的索引(仅当列表不会重新排序时)是更优选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:25:22