SegmentedControl
SegmentedControl
is a component used for allowing users to select one option from multiple choices.
<SegmentedControl.Root defaultValue="ハチワレ">
<SegmentedControl.Item value="ハチワレ">ハチワレ</SegmentedControl.Item>
<SegmentedControl.Item value="うさぎ">うさぎ</SegmentedControl.Item>
<SegmentedControl.Item value="モモンガ">モモンガ</SegmentedControl.Item>
</SegmentedControl.Root>
Usage
import { SegmentedControl } from "@yamada-ui/react"
import { SegmentedControl } from "@/components/ui"
import { SegmentedControl } from "@workspaces/ui"
<SegmentedControl.Root>
<SegmentedControl.Item />
</SegmentedControl.Root>
Use items
const items = useMemo<SegmentedControl.RootProps["items"]>(
() => [
{ label: "ハチワレ", value: "ハチワレ" },
{ label: "うさぎ", value: "うさぎ" },
{ label: "モモンガ", value: "モモンガ" },
],
[],
)
return <SegmentedControl.Root defaultValue="ハチワレ" items={items} />
Change size
const items = useMemo<SegmentedControl.RootProps["items"]>(
() => [
{ 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>
)
Change orientation
const items = useMemo<SegmentedControl.RootProps["items"]>(
() => [
{ 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>
)
Make rounded
const items = useMemo<SegmentedControl.RootProps["items"]>(
() => [
{ label: "ハチワレ", value: "ハチワレ" },
{ label: "うさぎ", value: "うさぎ" },
{ label: "モモンガ", value: "モモンガ" },
],
[],
)
return (
<SegmentedControl.Root defaultValue="ハチワレ" fullRounded items={items} />
)
Disable
const items = useMemo<SegmentedControl.RootProps["items"]>(
() => [
{ 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>
)
Read-Only
const items = useMemo<SegmentedControl.RootProps["items"]>(
() => [
{ 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>
)
Control
const [value, setValue] = useState("ハチワレ")
const items = useMemo<SegmentedControl.RootProps["items"]>(
() => [
{ label: "ハチワレ", value: "ハチワレ" },
{ label: "うさぎ", value: "うさぎ" },
{ label: "モモンガ", value: "モモンガ" },
],
[],
)
return <SegmentedControl.Root items={items} value={value} onChange={setValue} />
"use client"
to the top of the file.Props
Accessibility
Currently, this section is being updated due to the migration of v2.