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

使用Shadcn/Radix asChild触发React.Children.only错误的问题

解决Shadcn/Radix SelectTrigger asChild的React.Children.only错误

问题原因

使用SelectTrigger asChild时,Radix要求传递给它的子元素必须是单个React元素。你的代码里,Button的子节点用了React片段(<>...</>),虽然片段本身不生成DOM,但React.Children.only会识别到片段内部包含多个子节点(文本/字段值 + ChevronsUpDown图标),从而触发该错误。替换Button为div后依然报错,也是因为div内部还是用片段包裹了多个子元素。

修复方案

把片段替换成一个实际的容器元素(比如<div>或<span>),确保Button只有一个子元素。修改后的代码如下:

<SelectTrigger asChild>
    <Button
        variant="outline"
        role="combobox"
        className={cn(
            "w-[200px] justify-between",
            !field.value &&
                "text-muted-foreground",
        )}
    >
        {/* 用div替换片段,保证单个子元素 */}
        <div className="flex items-center justify-between w-full">
            {field.value
                ? getAllFormFactors.data?.find(
                        (formFactor) =>
                            formFactor.id === field.value,
                    )?.name
                : "Select form factor"}
            <ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
        </div>
    </Button>
</SelectTrigger>

如果不需要额外样式,也可以用<span>代替<div>,核心是保证Button的子元素为单个节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:03:19