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

Antd Select封装组件报错:children应为Select.Option而非Option

问题描述

封装Ant Design的Select组件后,使用时控制台出现以下警告:

Warning: `children` should be `Select.Option` or `Select.OptGroup` instead of `Option`.

封装代码如下:

import { Select as ASelect } from 'antd';

function Select({ children, ...props }) {
  return <ASelect {...props}>{children}</ASelect>;
}

function Option({ children, ...props }) {
  return <ASelect.Option {...props}>{children}</ASelect.Option>;
}

Select.Option = Option;

组件用法示例:

<Select defaultValue="option1" style={{ width: 120 }}>
  {options.map((o) => {
    const { key, label } = o;

    return (
      <Select.Option key={key} value={key}>
        {label}
      </Select.Option>
    );
  })}
</Select>

选项数组:

const options = [
  { key: 'option1', label: 'Option 1' },
  { key: 'option2', label: 'Option 2' },
  { key: 'option3', label: 'Option 3' },
];
解决方案

问题根源是Antd的Select组件内部会校验子组件的类型,你自定义的Option是全新的React组件类型,并非Antd原生的ASelect.Option,因此无法通过校验触发警告。

直接移除自定义的Option组件,将Antd原生的ASelect.Option直接挂载到自定义Select上即可解决:

修改后的封装代码:

import { Select as ASelect } from 'antd';

function Select({ children, ...props }) {
  return <ASelect {...props}>{children}</ASelect>;
}

// 直接挂载原生Option,无需自定义封装
Select.Option = ASelect.Option;
// 若需要使用OptGroup,同样直接挂载原生组件
Select.OptGroup = ASelect.OptGroup;

修改后,Select.Option就是Antd原生组件类型,Select内部的校验逻辑可以正确识别,警告会自动消失,同时完全兼容原有使用方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:55:17