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

React Antd Dropdown动态菜单报错:React.Children.only期望单个子元素

解决Ant Design Dropdown报错:React.Children.only expected to receive a single React element child

问题根源是你第二个Dropdown的menu配置语法错误:
你写的menu={{ items2 }}是ES6对象简写,实际等价于menu={{ items2: items2 }},但Ant Design Dropdown要求menu对象必须通过items这个key来传入菜单项数组,组件无法识别items2这个自定义键名,导致菜单没有正确渲染,点击时触发了React.Children.only的错误。

修复代码

把第二个Dropdown的menu配置改成menu={{ items: items2 }}即可:

var items = [
    {
      key: '0',
      label:  'item0',
    },
    {
      key: '1',
      label:  'item1',
    }
  ];
  
var items2 = []
for (let item of items) items2.push({key: items2.length.toString(), label: item.label})

console.log(items, items2, JSON.stringify(items), JSON.stringify(items2), JSON.stringify(items) === JSON.stringify(items2) )

return (<>
  <Dropdown menu={{ items }} trigger={['click']}>
    <a onClick={(e) => e.preventDefault()}>
      {name} <DownOutlined />
    </a>
  </Dropdown>
  {/* 修正menu配置的键名 */}
  <Dropdown menu={{ items: items2 }} trigger={['click']}>
    <a onClick={(e) => e.preventDefault()}>
      {name} <DownOutlined />
    </a>
  </Dropdown>
</>)

验证逻辑

虽然items和items2的内容完全一致,但组件只认menu.items这个固定结构,之前的写法相当于给menu传了一个无效键,组件无法解析出菜单项,自然会抛出子元素异常的错误。修复后组件能正确读取菜单项数组,即可正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:23:55