MenuChevron Down
RadioCardGroup 单选卡片组 - Docs - Artefact

RadioCardGroup 单选卡片组

Forms
智能自动检测

简介

一组以可选卡片形式呈现的单选组,适用于比普通单选按钮需要更多视觉权重的选择 —— 例如价格档位、配送速度等。

水合

第 2 级 —— 智能自动检测。 RadioCardGroup 会渲染为静态 HTML,并且除非存在行为信号,否则不会发送任何客户端 JS。传入 interactive={true} 可强制水合,或传入 interactive={false} 强制静态渲染。

当存在以下任一信号(或设置了 interactive={true})时,它会作为岛屿进行水合:

  • value(受控选择)
  • defaultValue(非受控初始选择)
  • onValueChange
interactive 属性结果
省略,且信号静态 —— 无客户端 JS
省略,但存在信号作为岛屿水合
true作为岛屿水合
false静态 —— 无客户端 JS

用法

Plan
Billing
import { RadioCardGroup } from "../components/ui";

export default function MyPage() {
  return (
    <RadioCardGroup
      label="Plan"
      defaultValue="pro"
      items={[
        { label: "Hobby", value: "hobby" },
        { label: "Pro", value: "pro" },
        { label: "Enterprise", value: "enterprise" },
      ]}
    />
  );
}

自定义组合

传入 children 以完全掌控每张卡片的内容,取代 items 数组:

import { RadioCardGroup } from "../components/ui";

export default function MyPage() {
  return (
    <RadioCardGroup label="Plan" defaultValue="pro">
      <RadioCardGroup.Item value="hobby">
        <RadioCardGroup.ItemText>Hobby — $0/mo</RadioCardGroup.ItemText>
        <RadioCardGroup.ItemControl />
        <RadioCardGroup.ItemHiddenInput />
      </RadioCardGroup.Item>
      <RadioCardGroup.Item value="pro">
        <RadioCardGroup.ItemText>Pro — $20/mo</RadioCardGroup.ItemText>
        <RadioCardGroup.ItemControl />
        <RadioCardGroup.ItemHiddenInput />
      </RadioCardGroup.Item>
      <RadioCardGroup.Indicator />
    </RadioCardGroup>
  );
}

CMS 页面构建器

该组件可作为 radioCardGroup 区块在 页面构建器content/pages/*.json)中使用:

{
  "type": "radioCardGroup",
  "label": "Plan",
  "defaultValue": "pro",
  "variant": "outline",
  "items": [
    { "label": "Hobby", "value": "hobby" },
    { "label": "Pro", "value": "pro" },
    { "label": "Enterprise", "value": "enterprise", "disabled": true }
  ]
}

在页面构建器中,它始终以 interactive 渲染。

属性

Root

属性类型说明
valuestring当前选中的值(受控)。
defaultValuestring初始选中的值(非受控)。
onValueChange(details: { value: string }) => void选择发生变化时调用。
idstring根元素的 id。
namestring底层 radio 输入的 name,用于原生表单提交。
disabledboolean禁用所有项。
readOnlyboolean阻止选择变更,但仍允许聚焦。
variant"subtle" | "outline" | "surface" | "solid"视觉样式。默认 "outline"
size"md"视觉尺寸。
colorPalette"blue" | "green" | "red" | "purple" | "orange" | "amber" | "cyan" | "slate" | "gray"配色主题。
interactiveboolean覆盖水合决策(见上文)。
classstring根元素的自定义 CSS 类。

默认组合

属性类型说明
items(string | RadioCardGroupItem)[]要渲染的卡片。普通字符串是 { value, label: value } 的简写。
labelstring | JSX.Element渲染在卡片上方的标签。

RadioCardGroupItem

属性类型说明
valuestring该项的唯一值。
labelstring | JSX.Element卡片的展示内容。
disabledboolean禁用此卡片。
invalidboolean将此卡片标记为无效。

子组件

部分说明
RadioCardGroup.Label组的标签(<span>)。
RadioCardGroup.Item一张可选卡片。role="radio",需要 value 属性。
RadioCardGroup.ItemText卡片的展示文本/内容。
RadioCardGroup.ItemControl卡片的视觉单选指示器包裹元素。
RadioCardGroup.ItemHiddenInput用于保存选择以供表单提交的视觉隐藏原生 <input type="radio">
RadioCardGroup.Indicator用于表示选中状态的共享滑动指示器元素。

无障碍

  • 根元素具有 role="radiogroup";每个项具有 role="radio",并通过 aria-checked 反映选中状态。
  • 项使用漫游式 tabIndex —— 只有选中的(或第一个可用的)项位于 tab 序列中,与原生单选组的键盘行为一致。
  • data-statechecked/unchecked)与 data-disabled 会镜像到各项及其文本/控制部分,用于样式设置。