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

ReactJS MUI动态生成分组按钮无法点击问题求助

问题原因与解决方案

核心问题:循环Fragment缺少唯一key属性

你动态分组后ListItemButton点击无响应的根本原因是:循环生成的React.Fragment没有设置key属性。React的虚拟DOM diff算法依赖key来识别列表元素的身份,缺少正确的key会导致组件复用逻辑出错,进而引发事件绑定失效。

你的静态代码和不分组动态代码能正常工作,是因为:

  • 静态代码是固定元素,React无需追踪身份变化
  • 不分组动态代码直接给每个ListItemButton设置了唯一key,React能正确识别每个元素

修复代码

将动态分组代码中的React.Fragment的id替换为key(clientName作为分组键,理论上是唯一的):

{Object.entries(groupedData).map(([clientName, locomotives]) => (
    <React.Fragment key={clientName}>
        <ListSubheader sx={{fontStyle:"italic", fontWeight:"bold", color:"black"}}>{clientName}</ListSubheader>
        {locomotives.map((locomotive) => (
            <ListItemButton key={locomotive.locomotive_number_id} value={locomotive.locomotive_number_id}>
                <ListItemText  primary={locomotive.locomotive_number_id} secondary={`Modèle : ${locomotive.locomotive_model}`}/>
            </ListItemButton>
        ))}
    </React.Fragment>
))}

额外验证点

  1. 确保clientName是唯一值:如果存在客户名称重复的情况,建议给分组键添加唯一标识(比如clientName + clientId)
  2. 统一ListItemButton的key:你不分组时用的是locomotive.locomotive_number_id,分组时换成了locomotive.locomotive_asset_id,确保这个值全局唯一,避免key冲突导致的异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:33:12