Skip to content

Radio

RadioRadioGroup 用于一组互斥选项。它们基于 Radix RadioGroup 实现,支持受控/非受控、原生表单提交和 sx 样式定制。

Basic

RadioGroup 可以通过 options 快速渲染一组选项。

Controlled

通过 valueonValueChange 管理受控值。

Form Submit

传入 name 后,RadioGroup 可以放入原生 form,提交时会输出当前选中的值。

SX Styling

可以通过 sx 定制分组容器,也可以通过 options.radioProps 定制单个 Radio。

常见场景

基础表单

在普通表单项中使用 Radio,保持 label、错误提示和控件状态清晰可见。

受控状态

当字段值需要联动查询、校验或提交时,使用受控 props 管理状态。

禁用与校验

禁用、必填、错误等状态应由表单层统一管理,再传递给 Radio。

Usage

tsx
import * as React from "react";
import { RadioGroup } from "@ldkj/web-ui";

const options = [
  { label: "标准版", value: "standard" },
  { label: "专业版", value: "pro" },
  { label: "企业版", value: "enterprise", disabled: true },
];

export function Example() {
  const [value, setValue] = React.useState("pro");

  return (
    <RadioGroup
      name="plan"
      value={value}
      onValueChange={setValue}
      options={options}
    />
  );
}

组合式用法:

tsx
import { Label, Radio, RadioGroup } from "@ldkj/web-ui";

export function ComposeExample() {
  return (
    <RadioGroup name="size" defaultValue="md">
      <Label>
        <Radio value="sm" />
        小号
      </Label>
      <Label>
        <Radio value="md" />
        中号
      </Label>
    </RadioGroup>
  );
}

API

RadioGroup

属性说明类型默认值
options选项列表RadioGroupOption[]-
name表单字段名string-
value受控值string-
defaultValue默认值string-
onValueChange值变化回调(value: string) => void-
disabled是否禁用整组booleanfalse
direction排列方向"vertical" | "horizontal""vertical"
gap选项间距"xs" | "sm" | "md" | "lg" | number | string"md"
className自定义类名string-
class类名别名string-
style原生样式React.CSSProperties-
sxCSS-in-JS 样式入口SxProps-

RadioGroupOption

属性说明类型默认值
label选项显示内容React.ReactNode-
value选项值string-
disabled是否禁用该选项booleanfalse
description选项辅助描述React.ReactNode-
className选项 label 类名string-
radioProps透传给内部 RadioRadioProps-

Radio

属性说明类型默认值
value选项值string-
disabled是否禁用booleanfalse
children自定义状态指示器React.ReactNode-
className自定义类名string-
class类名别名string-
style原生样式React.CSSProperties-
sxCSS-in-JS 样式入口SxProps-

行为规则 / 优先级

  • 表单组件优先由外部表单层管理值、校验和提交状态。
  • classNameclass 用于追加类名;如同时传入原生 style,内联样式会按 React 规则覆盖同名 CSS。
  • 复杂内容优先通过组合能力传入,避免在组件内部硬编码业务文案。
  • Radio 的默认值应服务于最常见场景,特殊场景通过显式 props 覆盖。

Notes

  • Radio 需要放在 RadioGroup 内使用。
  • RadioGroup 的单选语义不可取消,适合必须从一组选项中选择一个值的场景。
  • 如果需要可取消的单选外观,可以继续使用 CheckboxGroup type="single"