apps/docs/content/docs/cn/react/migration/(components)/radio-group.mdx
在 v2 中,RadioGroup 通过 label prop 设置标题:
import { RadioGroup, Radio } from "@heroui/react";
export default function App() {
return (
<RadioGroup label="Select city">
<Radio value="london">London</Radio>
<Radio value="tokyo" description="Capital of Japan">Tokyo</Radio>
<Radio value="paris">Paris</Radio>
</RadioGroup>
);
}
在 v3 中,RadioGroup 改用 Label 组件,并配合 Radio 的复合结构:
import { RadioGroup, Radio, Label, Description } from "@heroui/react";
export default function App() {
return (
<RadioGroup name="city">
<Label>Select city</Label>
<Radio value="london">
<Radio.Content>
<Radio.Control>
<Radio.Indicator />
</Radio.Control>
London
</Radio.Content>
</Radio>
<Radio value="tokyo">
<Radio.Content>
<Radio.Control>
<Radio.Indicator />
</Radio.Control>
Tokyo
</Radio.Content>
<Description>Capital of Japan</Description>
</Radio>
<Radio value="paris">
<Radio.Content>
<Radio.Control>
<Radio.Indicator />
</Radio.Control>
Paris
</Radio.Content>
</Radio>
</RadioGroup>
);
}
v2: 在 RadioGroup 上使用 label prop
v3: 改用 Label 组件作为 RadioGroup 的子节点
v2: 简单的 Radio 组件,子节点直接作为标签
v3: 复合 Radio 组件,由 Radio.Content、Radio.Control 与 Radio.Indicator 组成
v2: 在单个 Radio 组件上使用 description prop
v3: 将 Description 组件作为 Radio.Content 的兄弟节点使用
v2: 使用 onValueChange prop
v3: 改用 onChange prop(来自 React Aria Components)
v3: 集成到表单时需要 name prop
v3: 新增 variant prop:"primary"(默认)或 "secondary",后者用于较弱的视觉强调,适合 Surface 组件场景
v3: 新增 isReadOnly prop,可阻止值变化但仍保持分组可聚焦
<Tabs items={["v2", "v3"]}>
<Tab value="v2">
tsx <RadioGroup label="Select plan"> <Radio value="basic" description="Basic features">Basic</Radio> <Radio value="pro" description="All features">Pro</Radio> </RadioGroup>
</Tab>
<Tab value="v3">
```tsx
import { RadioGroup, Radio, Label, Description } from "@heroui/react";
<RadioGroup name="plan">
<Label>Select plan</Label>
<Radio value="basic">
<Radio.Content>
<Radio.Control>
<Radio.Indicator />
</Radio.Control>
Basic
</Radio.Content>
<Description>Basic features</Description>
</Radio>
<Radio value="pro">
<Radio.Content>
<Radio.Control>
<Radio.Indicator />
</Radio.Control>
Pro
</Radio.Content>
<Description>All features</Description>
</Radio>
</RadioGroup>
```
<Tabs items={["v2", "v3"]}>
<Tab value="v2">
tsx <RadioGroup label="Select plan"> <Radio value="basic">Basic</Radio> <Radio value="pro">Pro</Radio> </RadioGroup>
</Tab>
<Tab value="v3">
tsx import { RadioGroup, Radio, Label } from "@heroui/react"; <RadioGroup variant="primary" name="plan"> <Label>Select plan</Label> <Radio value="basic"> <Radio.Content> <Radio.Control> <Radio.Indicator /> </Radio.Control> Basic </Radio.Content> </Radio> </RadioGroup> <RadioGroup variant="secondary" name="plan"> <Label>Select plan</Label> <Radio value="basic"> <Radio.Content> <Radio.Control> <Radio.Indicator /> </Radio.Control> Basic </Radio.Content> </Radio> </RadioGroup>
</Tab>
</Tabs>
import { RadioGroup, Radio, Label } from "@heroui/react";
<RadioGroup isReadOnly defaultValue="basic" name="plan">
<Label>Select plan</Label>
<Radio value="basic">
<Radio.Content>
<Radio.Control>
<Radio.Indicator />
</Radio.Control>
Basic
</Radio.Content>
</Radio>
<Radio value="pro">
<Radio.Content>
<Radio.Control>
<Radio.Indicator />
</Radio.Control>
Pro
</Radio.Content>
</Radio>
</RadioGroup>
<Tabs items={["v2", "v3"]}> <Tab value="v2"> ```tsx import { useState } from "react"; import { RadioGroup, Radio } from "@heroui/react";
const [value, setValue] = useState("london");
<RadioGroup value={value} onValueChange={setValue} label="Select city">
<Radio value="london">London</Radio>
<Radio value="tokyo">Tokyo</Radio>
</RadioGroup>
```
const [value, setValue] = useState("london");
<RadioGroup name="city" value={value} onChange={setValue}>
<Label>Select city</Label>
<Radio value="london">
<Radio.Content>
<Radio.Control>
<Radio.Indicator />
</Radio.Control>
London
</Radio.Content>
</Radio>
<Radio value="tokyo">
<Radio.Content>
<Radio.Control>
<Radio.Indicator />
</Radio.Control>
Tokyo
</Radio.Content>
</Radio>
</RadioGroup>
```
Label 子组件取代 label propDescription 组件作为 Radio.Content 的兄弟节点,取代 Radio 的 description proponValueChange 改为 onChangename prop 以便集成到表单中variant prop:"primary"(默认)或 "secondary",用于较弱的视觉强调isReadOnly prop:阻止值变化但保持分组可聚焦