Radio
Radioは、ユーザーが複数の選択肢の中から1つの値を選択するために使用されるコンポーネントです。
<RadioGroup.Root>
<RadioGroup.Item value="1">織田信長</RadioGroup.Item>
<RadioGroup.Item value="2">豊臣秀吉</RadioGroup.Item>
<RadioGroup.Item value="3">徳川家康</RadioGroup.Item>
</RadioGroup.Root>
使い方
import { Radio, RadioGroup } from "@yamada-ui/react"
import { Radio, RadioGroup } from "@/components/ui"
import { Radio, RadioGroup } from "@workspaces/ui"
<RadioGroup.Root>
<RadioGroup.Item />
</RadioGroup.Root>
itemsを使う
const items = useMemo<RadioGroup.Item[]>(
() => [
{ label: "織田信長", value: "1" },
{ label: "豊臣秀吉", value: "2" },
{ label: "徳川家康", value: "3" },
],
[],
)
return <RadioGroup.Root items={items} />
バリアントを変更する
const items = useMemo<RadioGroup.Item[]>(
() => [
{ label: "Checked", value: "1" },
{ label: "No checked", value: "2" },
],
[],
)
return (
<VStack>
<For each={["solid", "subtle", "surface", "outline"]}>
{(variant, index) => (
<RadioGroup.Root
key={variant}
variant={variant}
defaultValue="1"
items={items}
/>
)}
</For>
</VStack>
)
サイズを変更する
const items = useMemo<RadioGroup.Item[]>(
() => [
{ label: "Checked", value: "1" },
{ label: "No checked", value: "2" },
],
[],
)
return (
<VStack>
<For each={["sm", "md", "lg"]}>
{(size, index) => (
<RadioGroup.Root
key={size}
size={size}
defaultValue="1"
items={items}
/>
)}
</For>
</VStack>
)
デフォルト値を設定する
デフォルト値を設定する場合は、defaultValueに値を設定します。
const items = useMemo<RadioGroup.Item[]>(
() => [
{ label: "織田信長", value: "1" },
{ label: "豊臣秀吉", value: "2" },
{ label: "徳川家康", value: "3" },
],
[],
)
return <RadioGroup.Root defaultValue="1" items={items} />
デフォルトで選択済みにする
デフォルトで選択済みにする場合は、defaultCheckedをtrueに設定します。
const items = useMemo<RadioGroup.Item[]>(
() => [
{ defaultChecked: true, label: "織田信長", value: "1" },
{ label: "豊臣秀吉", value: "2" },
{ label: "徳川家康", value: "3" },
],
[],
)
return <RadioGroup.Root items={items} />
方向を変更する
方向を変更する場合は、orientationに"horizontal"または"vertical"を設定します。デフォルトは"vertical"です。
const items = useMemo<RadioGroup.Item[]>(
() => [
{ label: "織田信長", value: "1" },
{ label: "豊臣秀吉", value: "2" },
{ label: "徳川家康", value: "3" },
],
[],
)
return <RadioGroup.Root items={items} orientation="horizontal" />
形を変更する
形を変更する場合は、shapeに"circle"や"rounded"などを設定します。デフォルトは"circle"です。
const items = useMemo<RadioGroup.Item[]>(
() => [
{ label: "織田信長", value: "1" },
{ label: "豊臣秀吉", value: "2" },
{ label: "徳川家康", value: "3" },
],
[],
)
return (
<VStack>
<For each={["circle", "square", "rounded"]}>
{(shape) => (
<RadioGroup.Root
key={shape}
defaultValue="1"
shape={shape}
items={items}
/>
)}
</For>
</VStack>
)
無効にする
無効にする場合は、disabledをtrueに設定します。
<RadioGroup.Root>
<For each={["solid", "subtle", "surface", "outline"]}>
{(variant) => (
<RadioGroup.Item key={variant} variant={variant} disabled>
{toTitleCase(variant)}
</RadioGroup.Item>
)}
</For>
</RadioGroup.Root>
読み取り専用にする
読み取り専用にする場合は、readOnlyをtrueに設定します。
<RadioGroup.Root>
<For each={["solid", "subtle", "surface", "outline"]}>
{(variant) => (
<RadioGroup.Item key={variant} variant={variant} readOnly defaultChecked>
{toTitleCase(variant)}
</RadioGroup.Item>
)}
</For>
</RadioGroup.Root>
無効な入力にする
無効な入力にする場合は、invalidをtrueに設定します。
<RadioGroup.Root>
<For each={["solid", "subtle", "surface", "outline"]}>
{(variant) => (
<RadioGroup.Item key={variant} variant={variant} invalid>
{toTitleCase(variant)}
</RadioGroup.Item>
)}
</For>
</RadioGroup.Root>
ボーダーの色を変更する
ボーダーの色を変更する場合は、focusBorderColorまたはerrorBorderColorに値を設定します。
<RadioGroup.Root>
<RadioGroup.Item value="1">Default border color</RadioGroup.Item>
<RadioGroup.Item focusBorderColor="green.500" value="2">
Custom border color
</RadioGroup.Item>
<RadioGroup.Item errorBorderColor="orange.500" invalid value="3">
Custom border color
</RadioGroup.Item>
</RadioGroup.Root>
カスタムコンポーネントを使う
const { getInputProps, getLabelProps, getRootProps } = useRadioGroup({
defaultValue: "1",
})
const CustomRadio = ({ children, ...rest }) => {
return (
<Box
as="label"
css={{
"&:has(input:checked)": {
bg: "colorScheme.solid",
borderColor: "colorScheme.solid",
color: "colorScheme.contrast",
},
alignItems: "center",
borderWidth: "1px",
display: "flex",
h: "10",
px: "3",
rounded: "l2",
}}
{...getLabelProps()}
>
<Box as="input" {...getInputProps(rest)} />
{children}
</Box>
)
}
return (
<HStack {...getRootProps()}>
<CustomRadio value="1">織田信長</CustomRadio>
<CustomRadio value="2">豊臣秀吉</CustomRadio>
<CustomRadio value="3">徳川家康</CustomRadio>
</HStack>
)
"use client"をファイルの上部に追加する必要があります。制御する
const [value, setValue] = useState("1")
const items = useMemo<RadioGroup.Item[]>(
() => [
{ label: "織田信長", value: "1" },
{ label: "豊臣秀吉", value: "2" },
{ label: "徳川家康", value: "3" },
],
[],
)
return <RadioGroup.Root items={items} value={value} onChange={setValue} />
"use client"をファイルの上部に追加する必要があります。Props
アクセシビリティ
Radioは、アクセシビリティに関してWAI-ARIA - Radio Patternに従います。
Field.Rootを使用しない場合は、RadioGroup.Rootにaria-labelまたはaria-labelledbyを設定します。
<RadioGroup.Root aria-label="キャラクター">
<RadioGroup.Item value="孫悟空">孫悟空</RadioGroup.Item>
<RadioGroup.Item value="ベジータ">ベジータ</RadioGroup.Item>
<RadioGroup.Item value="フリーザ">フリーザ</RadioGroup.Item>
</RadioGroup.Root>
<VStack gap="sm">
<Text as="h3" id="label">
キャラクター
</Text>
<RadioGroup.Root aria-labelledby="label">
<RadioGroup.Item value="孫悟空">孫悟空</RadioGroup.Item>
<RadioGroup.Item value="ベジータ">ベジータ</RadioGroup.Item>
<RadioGroup.Item value="フリーザ">フリーザ</RadioGroup.Item>
</RadioGroup.Root>
</VStack>
キーボード操作
| キー | 説明 | 状態 |
|---|---|---|
Tab | ラジオグループ内のチェックされたラジオボタンをフォーカスします。ラジオボタンがチェックされていない場合は、最初のラジオボタンをフォーカスします。 | - |
Space | フォーカスされたラジオボタンをチェックします。 | - |
ArrowLeft | 無効ではない前のラジオボタンをチェックします。 | - |
ArrowRight | 無効ではない次のラジオボタンをチェックします。 | - |
ArrowUp | 無効ではない前のラジオボタンをチェックします。 | - |
ArrowDown | 無効ではない次のラジオボタンをチェックします。 | - |
ARIAロールと属性
| コンポーネント | ロールと属性 | 使い方 |
|---|---|---|
RadioGroup.Root | role="radiogroup" | ラジオグループであることを示します。 |
aria-labelledby | RadioGroup.RootがField.Root内にあり、Field.RootにlabelまたはField.Labelが設定されている場合は、そのidを設定します。 | |
aria-describedby | RadioGroup.RootがField.Root内にあり、Field.RootにerrorMessageまたはhelperMessage、もしくはField.ErrorMessageまたはField.HelperMessageが設定されている場合は、そのidを設定します。 | |
Radio, RadioGroup.Item | aria-checked | ラジオボタンがチェックされている場合は"true"を設定し、チェックされていない場合は"false"を設定します。 |
aria-describedby | RadioまたはRadioGroup.ItemがField.Root内にあり、Field.RootにerrorMessageまたはhelperMessage、もしくはField.ErrorMessageまたはField.HelperMessageが設定されている場合は、そのidを設定します。 | |
aria-disabled | disabledまたはreadOnlyが設定されている場合は"true"を設定します。 | |
aria-invalid | invalidが設定されている場合は"true"を設定します。 | |
aria-required | requiredが設定されている場合は"true"を設定します。 | |
RadioIndicator | aria-hidden | 要素をアクセシビリティツリーから除外します。 |