SegmentedControl
SegmentedControlは、ユーザーが複数の選択肢の中から1つを選択するために使用されるコンポーネントです。
<SegmentedControl.Root defaultValue="ハチワレ">
<SegmentedControl.Item value="ハチワレ">ハチワレ</SegmentedControl.Item>
<SegmentedControl.Item value="うさぎ">うさぎ</SegmentedControl.Item>
<SegmentedControl.Item value="モモンガ">モモンガ</SegmentedControl.Item>
</SegmentedControl.Root>
使い方
import { SegmentedControl } from "@yamada-ui/react"
import { SegmentedControl } from "@/components/ui"
import { SegmentedControl } from "@workspaces/ui"
<SegmentedControl.Root>
<SegmentedControl.Item />
</SegmentedControl.Root>
itemsを使う
const items = useMemo<SegmentedControl.Item[]>(
() => [
{ label: "ハチワレ", value: "ハチワレ" },
{ label: "うさぎ", value: "うさぎ" },
{ label: "モモンガ", value: "モモンガ" },
],
[],
)
return <SegmentedControl.Root defaultValue="ハチワレ" items={items} />
サイズを変更する
const items = useMemo<SegmentedControl.Item[]>(
() => [
{ label: "ハチワレ", value: "ハチワレ" },
{ label: "うさぎ", value: "うさぎ" },
{ label: "モモンガ", value: "モモンガ" },
],
[],
)
return (
<VStack alignItems="flex-start">
<For each={["sm", "md", "lg", "xl"]}>
{(size) => (
<SegmentedControl.Root
key={size}
size={size}
defaultValue="ハチワレ"
items={items}
/>
)}
</For>
</VStack>
)
方向を変更する
const items = useMemo<SegmentedControl.Item[]>(
() => [
{ label: "ハチワレ", value: "ハチワレ" },
{ label: "うさぎ", value: "うさぎ" },
{ label: "モモンガ", value: "モモンガ" },
],
[],
)
return (
<VStack alignItems="flex-start">
<For each={["horizontal", "vertical"]}>
{(orientation) => (
<SegmentedControl.Root
key={orientation}
defaultValue="ハチワレ"
items={items}
orientation={orientation}
/>
)}
</For>
</VStack>
)
丸くする
const items = useMemo<SegmentedControl.Item[]>(
() => [
{ label: "ハチワレ", value: "ハチワレ" },
{ label: "うさぎ", value: "うさぎ" },
{ label: "モモンガ", value: "モモンガ" },
],
[],
)
return (
<SegmentedControl.Root defaultValue="ハチワレ" fullRounded items={items} />
)
無効にする
const items = useMemo<SegmentedControl.Item[]>(
() => [
{ label: "ハチワレ", value: "ハチワレ" },
{ label: "うさぎ", value: "うさぎ" },
{ label: "モモンガ", value: "モモンガ" },
],
[],
)
return (
<VStack alignItems="flex-start">
<SegmentedControl.Root defaultValue="ハチワレ" disabled items={items} />
<SegmentedControl.Root defaultValue="ハチワレ">
<SegmentedControl.Item value="ハチワレ">ハチワレ</SegmentedControl.Item>
<SegmentedControl.Item disabled value="うさぎ">
うさぎ
</SegmentedControl.Item>
<SegmentedControl.Item value="モモンガ">モモンガ</SegmentedControl.Item>
</SegmentedControl.Root>
</VStack>
)
読み取り専用にする
const items = useMemo<SegmentedControl.Item[]>(
() => [
{ label: "ハチワレ", value: "ハチワレ" },
{ label: "うさぎ", value: "うさぎ" },
{ label: "モモンガ", value: "モモンガ" },
],
[],
)
return (
<VStack alignItems="flex-start">
<SegmentedControl.Root defaultValue="ハチワレ" items={items} readOnly />
<SegmentedControl.Root defaultValue="ハチワレ">
<SegmentedControl.Item value="ハチワレ">ハチワレ</SegmentedControl.Item>
<SegmentedControl.Item readOnly value="うさぎ">
うさぎ
</SegmentedControl.Item>
<SegmentedControl.Item value="モモンガ">モモンガ</SegmentedControl.Item>
</SegmentedControl.Root>
</VStack>
)
制御する
const [value, setValue] = useState("ハチワレ")
const items = useMemo<SegmentedControl.Item[]>(
() => [
{ label: "ハチワレ", value: "ハチワレ" },
{ label: "うさぎ", value: "うさぎ" },
{ label: "モモンガ", value: "モモンガ" },
],
[],
)
return <SegmentedControl.Root items={items} value={value} onChange={setValue} />
"use client"をファイルの上部に追加する必要があります。Props
アクセシビリティ
SegmentedControl.Itemにアイコンのみを使用する場合は、SegmentedControl.Itemにaria-labelを設定します。
<SegmentedControl.Root defaultValue="plus">
<SegmentedControl.Item aria-label="plus" value="plus">
<PlusIcon />
</SegmentedControl.Item>
<SegmentedControl.Item aria-label="minus" value="minus">
<MinusIcon />
</SegmentedControl.Item>
</SegmentedControl.Root>
キーボード操作
| キー | 説明 | 状態 |
|---|---|---|
Tab | 選択されている項目をフォーカスします。 | - |
ArrowLeft | 無効ではない前の項目をフォーカスします。最初の項目の場合は無効ではない最後の項目をフォーカスします。 | - |
ArrowRight | 無効ではない次の項目をフォーカスします。最後の項目の場合は無効ではない最初の項目をフォーカスします。 | - |
ArrowUp | 無効ではない前の項目をフォーカスします。最初の項目の場合は無効ではない最後の項目をフォーカスします。 | - |
ArrowDown | 無効ではない次の項目をフォーカスします。最後の項目の場合は無効ではない最初の項目をフォーカスします。 | - |
ARIAロールと属性
| コンポーネント | ロールと属性 | 使い方 |
|---|---|---|
SegmentedControl.Root | role="radiogroup" | ラジオグループであることを示します。 |
aria-disabled | disabledが設定されている場合は"true"を設定します。 | |
aria-orientation | orientationの値に基づいて"horizontal"または"vertical"を設定します。デフォルトは"horizontal"です。 | |
SegmentedControl.Item | aria-disabled | disabledが設定されている場合は、"true"を設定します。 |
aria-readonly | readOnlyが設定されている場合は、"true"を設定します。 |