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

已为列表项设置唯一Key仍报错?React Key警告问题求助

React列表key警告排查与修复

问题核心:你循环返回的直接子元素是空Fragment(<>),而非<MenuItem>。React要求循环生成的列表项,其最外层直接子元素必须携带唯一key属性——你把key加在了内部的<MenuItem>上,这不符合React的key校验规则。另外,空Fragment(<>...</>)本身不支持设置key,这才是警告的根源。

修复方案

方案1:移除不必要的Fragment

你的Fragment内部只包含一个<MenuItem>,完全可以直接返回<MenuItem>,去掉多余的Fragment包裹:

<MenuList width={'148px'} >
    { Object.entries(userRoleMenu[UserRole]).map((item, index) => 
        item[0]==='fpv' ?
        <MenuItem _hover={{backgroundColor:'gray.50'}} key={item[0]} onClick={handleMenuClick(item)}>
        </MenuItem>
        :
        <MenuItem _hover={{backgroundColor:'gray.50'}} key={item[0]} onClick={handleMenuClick(item)}>{item[0]}</MenuItem>
    )}
</MenuList>

方案2:使用带key的React.Fragment(若确实需要Fragment)

如果后续Fragment内要添加多个元素,必须使用完整的<React.Fragment>并为其设置key:

import React from 'react';

// ...

<MenuList width={'148px'} >
    { Object.entries(userRoleMenu[UserRole]).map((item, index) => 
        <React.Fragment key={item[0]}>
            {item[0]==='fpv' ?
            <MenuItem _hover={{backgroundColor:'gray.50'}} onClick={handleMenuClick(item)}>
            </MenuItem>
            :
            <MenuItem _hover={{backgroundColor:'gray.50'}} onClick={handleMenuClick(item)}>{item[0]}</MenuItem>
            }
        </React.Fragment>
    )}
</MenuList>

注意:此时内部的<MenuItem>不需要再设置key,React只校验循环最外层子元素的key唯一性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:16:02