开发预览 更新于 2026-05-10

Radio 单选框

单选框 —— Radio + RadioGroup 组合,单选互斥、键盘可达。

基础用法

RadioGroup 通过 provide / Contextvaluenamesizedisabled 注入到子项。任一子项被选中时回调 update:modelValue / onChange

已选:pro

<script setup lang="ts">
import { ref } from 'vue';
import { CfRadio, CfRadioGroup } from '@chufix-design/vue';

const plan = ref<'free' | 'pro' | 'team'>('pro');
</script>

<template>
<CfRadioGroup v-model="plan" name="plan">
  <CfRadio value="free">Free</CfRadio>
  <CfRadio value="pro">Pro</CfRadio>
  <CfRadio value="team">Team</CfRadio>
</CfRadioGroup>
</template>
import { useState } from 'react';
import { CfRadio, CfRadioGroup } from '@chufix-design/react';

export default function Demo() {
const [plan, setPlan] = useState<'free' | 'pro' | 'team'>('pro');
return (
  <CfRadioGroup value={plan} name="plan" onChange={(v) => setPlan(v as any)}>
    <CfRadio value="free">Free</CfRadio>
    <CfRadio value="pro">Pro</CfRadio>
    <CfRadio value="team">Team</CfRadio>
  </CfRadioGroup>
);
}

排列方向

direction="column" 把选项垂直排开。在选项较多或文案较长时使用。

<CfRadioGroup v-model="flavor" direction="column">
<CfRadio value="vanilla">香草</CfRadio>
<CfRadio value="chocolate">巧克力</CfRadio>
<CfRadio value="strawberry" disabled>草莓(缺货)</CfRadio>
<CfRadio value="matcha">抹茶</CfRadio>
</CfRadioGroup>
<CfRadioGroup value={flavor} direction="column" onChange={setFlavor}>
<CfRadio value="vanilla">香草</CfRadio>
<CfRadio value="chocolate">巧克力</CfRadio>
<CfRadio value="strawberry" disabled>草莓(缺货)</CfRadio>
<CfRadio value="matcha">抹茶</CfRadio>
</CfRadioGroup>

尺寸

size 设在 RadioGroup 上,注入给所有子项。

<CfRadioGroup size="sm" v-model="a">
<CfRadio value="s">Small</CfRadio>
<CfRadio value="t">Tiny</CfRadio>
</CfRadioGroup>
<CfRadioGroup size="md" v-model="b">…</CfRadioGroup>
<CfRadioGroup size="lg" v-model="c">…</CfRadioGroup>
<CfRadioGroup size="sm" value={a} onChange={setA}>
<CfRadio value="s">Small</CfRadio>
<CfRadio value="t">Tiny</CfRadio>
</CfRadioGroup>

事件与表单

change 会返回选中的值,同时透出 namechecked 与原生事件,适合表单联动、埋点、权限策略切换等场景。事件从 RadioGroup 发出时,meta 来自实际触发的子项。

cn
切换区域后会显示 value、name 与 checked。
<script setup lang="ts">
import { ref } from 'vue';
import { CfRadio, CfRadioGroup } from '@chufix-design/vue';

const region = ref('cn');
</script>

<template>
<CfRadioGroup v-model="region" name="deploy-region" @change="(value, meta) => console.log(value, meta.name)">
  <CfRadio value="cn">华东节点</CfRadio>
  <CfRadio value="eu">欧洲节点</CfRadio>
  <CfRadio value="us">美西节点</CfRadio>
</CfRadioGroup>
</template>
<CfRadioGroup
value={region}
name="deploy-region"
onChange={(value, meta) => {
  setRegion(value as string);
  console.log(meta.name, meta.checked);
}}
>
<CfRadio value="cn">华东节点</CfRadio>
<CfRadio value="eu">欧洲节点</CfRadio>
<CfRadio value="us">美西节点</CfRadio>
</CfRadioGroup>

API

RadioGroup

Prop类型默认值说明
valuestring | number | boolean | nullnull当前选中值
namestring透传给底层 input 用于表单提交
size'sm' | 'md' | 'lg''md'整组尺寸
disabledbooleanfalse整组禁用
direction'row' | 'column''row'排列方向

Radio

Prop类型默认值说明
valuestring | number | boolean | null单项的值
disabledbooleanfalse单独禁用此项(叠加 RadioGroup.disabled)

Events

事件载荷说明
change / onChange(value, meta)选中值变化;meta 包含 eventvaluenamechecked
focus / onFocus(event)单个 Radio 获得焦点
blur / onBlur(event)单个 Radio 失去焦点

Radio 也可以脱离 RadioGroup 独立使用,自行管理 v-model / checked + onChange

反馈与讨论

Radio 单选框 的讨论

0
0 / 600
一键发送
正在加载评论...