RadioCard
RadioCard
は、ユーザーが複数の選択肢の中から1つを選択するための使用されるコンポーネントです。
インポート
import {RadioCard,RadioCardAddon,RadioCardDescription,RadioCardGroup,RadioCardLabel,} from "@yamada-ui/react"
RadioCardLabel
, RadioCardDescription
とRadioCardAddon
は、省略することができます。
使い方
編集可能な例
<RadioCardGroup> <RadioCard description="パパスの息子より、ふたつ年上のしっかり者の幼なじみ。彼と一緒に、レヌール城のお化け退治に繰り出した。" label="ビアンカ" value="ビアンカ" /> <RadioCard description="大富豪ルドマンの娘で、デボラの妹。ちょっぴり天然なところもある、清楚で可憐なお嬢様。" label="フローラ" value="フローラ" /> <RadioCard description="なんと、この私が、好きと申すか!?そ、それはいかん!もう1度、考えてみなさい。" label="ルドマン" value="ルドマン" /> </RadioCardGroup>
または、items
を設定することでRadioCard
を省略することができます。
編集可能な例
const items = useMemo<RadioCardItem[]>( () => [ { description: "パパスの息子より、ふたつ年上のしっかり者の幼なじみ。彼と一緒に、レヌール城のお化け退治に繰り出した。", label: "ビアンカ", value: "ビアンカ", }, { description: "大富豪ルドマンの娘で、デボラの妹。ちょっぴり天然なところもある、清楚で可憐なお嬢様。", label: "フローラ", value: "フローラ", }, { description: "なんと、この私が、好きと申すか!?そ、それはいかん!もう1度、考えてみなさい。", label: "ルドマン", value: "ルドマン", }, ], [], ) return <RadioCardGroup items={items} />
バリアントを変更する
編集可能な例
const items = useMemo<RadioCardItem[]>( () => [ { description: "パパスの息子より、ふたつ年上のしっかり者の幼なじみ。彼と一緒に、レヌール城のお化け退治に繰り出した。", label: "ビアンカ", value: "ビアンカ", }, { description: "大富豪ルドマンの娘で、デボラの妹。ちょっぴり天然なところもある、清楚で可憐なお嬢様。", label: "フローラ", value: "フローラ", }, { description: "なんと、この私が、好きと申すか!?そ、それはいかん!もう1度、考えてみなさい。", label: "ルドマン", value: "ルドマン", }, ], [], ) return ( <VStack> <For each={["outline", "subtle", "surface"]}> {(variant) => ( <RadioCardGroup key={variant} variant={variant} defaultValue="フローラ" items={items} /> )} </For> </VStack> )
サイズを変更する
編集可能な例
const items = useMemo<RadioCardItem[]>( () => [ { description: "パパスの息子より、ふたつ年上のしっかり者の幼なじみ。彼と一緒に、レヌール城のお化け退治に繰り出した。", label: "ビアンカ", value: "ビアンカ", }, { description: "大富豪ルドマンの娘で、デボラの妹。ちょっぴり天然なところもある、清楚で可憐なお嬢様。", label: "フローラ", value: "フローラ", }, { description: "なんと、この私が、好きと申すか!?そ、それはいかん!もう1度、考えてみなさい。", label: "ルドマン", value: "ルドマン", }, ], [], ) return ( <VStack> <For each={["sm", "md", "lg"]}> {(size) => ( <RadioCardGroup key={size} size={size} defaultValue="フローラ" items={items} /> )} </For> </VStack> )
カラースキーマを変更する
編集可能な例
const items = useMemo<RadioCardItem[]>( () => [ { label: "ビアンカ", value: "ビアンカ" }, { label: "フローラ", value: "フローラ" }, { label: "ルドマン", value: "ルドマン" }, ], [], ) return ( <VStack> <For each={["outline", "subtle", "surface"]}> {(variant) => ( <For key={variant} each={["secondary", "green"]}> {(colorScheme) => ( <RadioCardGroup key={colorScheme} colorScheme={colorScheme} variant={variant} defaultValue="フローラ" items={items} /> )} </For> )} </For> </VStack> )
デフォルトで選択された状態にする
デフォルトで選択された状態にする場合は、defaultValue
に値を設定します。
編集可能な例
const items = useMemo<RadioCardItem[]>( () => [ { label: "ビアンカ", value: "ビアンカ" }, { label: "フローラ", value: "フローラ" }, { label: "ルドマン", value: "ルドマン" }, ], [], ) return <RadioCardGroup defaultValue="フローラ" items={items} />
アドオンを追加する
アドオンを追加する場合は、addon
にReactNode
を設定するか、RadioCardAddon
コンポーネントを使用します。
編集可能な例
const items = useMemo<RadioCardItem[]>( () => [ { addon: "ドラゴンクエストV 天空の花嫁(DQ5)", description: "パパスの息子より、ふたつ年上のしっかり者の幼なじみ。彼と一緒に、レヌール城のお化け退治に繰り出した。", label: "ビアンカ", value: "ビアンカ", }, { addon: "ドラゴンクエストV 天空の花嫁(DQ5)", description: "大富豪ルドマンの娘で、デボラの妹。ちょっぴり天然なところもある、清楚で可憐なお嬢様。", label: "フローラ", value: "フローラ", }, { addon: "ドラゴンクエストV 天空の花嫁(DQ5)", description: "なんと、この私が、好きと申すか!?そ、それはいかん!もう1度、考えてみなさい。", label: "ルドマン", value: "ルドマン", }, ], [], ) return <RadioCardGroup items={items} />
編集可能な例
<RadioCardGroup> <RadioCard addon="ドラゴンクエストV 天空の花嫁(DQ5)" description="パパスの息子より、ふたつ年上のしっかり者の幼なじみ。彼と一緒に、レヌール城のお化け退治に繰り出した。" label="ビアンカ" value="ビアンカ" /> <RadioCard addon="ドラゴンクエストV 天空の花嫁(DQ5)" description="大富豪ルドマンの娘で、デボラの妹。ちょっぴり天然なところもある、清楚で可憐なお嬢様。" label="フローラ" value="フローラ" /> <RadioCard addon="ドラゴンクエストV 天空の花嫁(DQ5)" description="なんと、この私が、好きと申すか!?そ、それはいかん!もう1度、考えてみなさい。" label="ルドマン" value="ルドマン" /> </RadioCardGroup>
編集可能な例
<RadioCardGroup> <RadioCard value="ビアンカ"> <RadioCardLabel>ビアンカ</RadioCardLabel> <RadioCardDescription> パパスの息子より、ふたつ年上のしっかり者の幼なじみ。彼と一緒に、レヌール城のお化け退治に繰り出した。 </RadioCardDescription> <RadioCardAddon>ドラゴンクエストV 天空の花嫁(DQ5)</RadioCardAddon> </RadioCard> <RadioCard value="フローラ"> <RadioCardLabel>フローラ</RadioCardLabel> <RadioCardDescription> 大富豪ルドマンの娘で、デボラの妹。ちょっぴり天然なところもある、清楚で可憐なお嬢様。 </RadioCardDescription> <RadioCardAddon>ドラゴンクエストV 天空の花嫁(DQ5)</RadioCardAddon> </RadioCard> <RadioCard value="ルドマン"> <RadioCardLabel>ルドマン</RadioCardLabel> <RadioCardDescription> なんと、この私が、好きと申すか!?そ、それはいかん!もう1度、考えてみなさい。 </RadioCardDescription> <RadioCardAddon>ドラゴンクエストV 天空の花嫁(DQ5)</RadioCardAddon> </RadioCard> </RadioCardGroup>
アイコンを非表示にする
アイコンを非表示にする場合は、RadioCardGroup
またはRadioCard
のwithIcon
をfalse
に設定します。デフォルトは、true
です。
編集可能な例
const items = useMemo<RadioCardItem[]>( () => [ { label: "ビアンカ", value: "ビアンカ", withIcon: false, }, { label: "フローラ", value: "フローラ", }, { label: "ルドマン", value: "ルドマン", }, ], [], ) return <RadioCardGroup items={items} />
編集可能な例
<RadioCardGroup withIcon={false}> <RadioCard label="ビアンカ" value="ビアンカ" /> <RadioCard label="フローラ" value="フローラ" /> <RadioCard label="ルドマン" value="ルドマン" /> </RadioCardGroup>
無効化する
無効化する場合は、isDisabled
をtrue
に設定します。
編集可能な例
const items = useMemo<RadioCardItem[]>( () => [ { label: "ビアンカ", value: "ビアンカ" }, { label: "フローラ", value: "フローラ" }, { label: "ルドマン", value: "ルドマン" }, ], [], ) return ( <VStack> <RadioCardGroup defaultValue="ビアンカ"> <RadioCard isDisabled value="ビアンカ"> <RadioCardLabel>ビアンカ</RadioCardLabel> <RadioCardDescription> パパスの息子より、ふたつ年上のしっかり者の幼なじみ。彼と一緒に、レヌール城のお化け退治に繰り出した。 </RadioCardDescription> </RadioCard> <RadioCard value="フローラ"> <RadioCardLabel>フローラ</RadioCardLabel> <RadioCardDescription> 大富豪ルドマンの娘で、デボラの妹。ちょっぴり天然なところもある、清楚で可憐なお嬢様。 </RadioCardDescription> </RadioCard> <RadioCard value="ルドマン"> <RadioCardLabel>ルドマン</RadioCardLabel> <RadioCardDescription> なんと、この私が、好きと申すか!?そ、それはいかん!もう1度、考えてみなさい。 </RadioCardDescription> </RadioCard> </RadioCardGroup> <RadioCardGroup isDisabled items={items} /> <Fieldset isDisabled legend="Which characters would you like to select?"> <RadioCardGroup items={items} /> </Fieldset> </VStack> )
読み取り専用にする
読み取り専用にする場合は、isReadOnly
をtrue
に設定します。
編集可能な例
const items = useMemo<RadioCardItem[]>( () => [ { label: "ビアンカ", value: "ビアンカ" }, { label: "フローラ", value: "フローラ" }, { label: "ルドマン", value: "ルドマン" }, ], [], ) return ( <VStack> <RadioCardGroup defaultValue="ビアンカ"> <RadioCard isReadOnly value="ビアンカ"> <RadioCardLabel>ビアンカ</RadioCardLabel> <RadioCardDescription> パパスの息子より、ふたつ年上のしっかり者の幼なじみ。彼と一緒に、レヌール城のお化け退治に繰り出した。 </RadioCardDescription> </RadioCard> <RadioCard value="フローラ"> <RadioCardLabel>フローラ</RadioCardLabel> <RadioCardDescription> 大富豪ルドマンの娘で、デボラの妹。ちょっぴり天然なところもある、清楚で可憐なお嬢様。 </RadioCardDescription> </RadioCard> <RadioCard value="ルドマン"> <RadioCardLabel>ルドマン</RadioCardLabel> <RadioCardDescription> なんと、この私が、好きと申すか!?そ、それはいかん!もう1度、考えてみなさい。 </RadioCardDescription> </RadioCard> </RadioCardGroup> <RadioCardGroup isReadOnly items={items} /> <Fieldset isReadOnly legend="Which characters would you like to select?"> <RadioCardGroup items={items} /> </Fieldset> </VStack> )
無効な入力にする
無効な入力にする場合は、isInvalid
をtrue
に設定します。
編集可能な例
const items = useMemo<RadioCardItem[]>( () => [ { label: "ビアンカ", value: "ビアンカ" }, { label: "フローラ", value: "フローラ" }, { label: "ルドマン", value: "ルドマン" }, ], [], ) return ( <VStack> <RadioCardGroup defaultValue="ビアンカ"> <RadioCard isInvalid value="ビアンカ"> <RadioCardLabel>ビアンカ</RadioCardLabel> <RadioCardDescription> パパスの息子より、ふたつ年上のしっかり者の幼なじみ。彼と一緒に、レヌール城のお化け退治に繰り出した。 </RadioCardDescription> </RadioCard> <RadioCard value="フローラ"> <RadioCardLabel>フローラ</RadioCardLabel> <RadioCardDescription> 大富豪ルドマンの娘で、デボラの妹。ちょっぴり天然なところもある、清楚で可憐なお嬢様。 </RadioCardDescription> </RadioCard> <RadioCard value="ルドマン"> <RadioCardLabel>ルドマン</RadioCardLabel> <RadioCardDescription> なんと、この私が、好きと申すか!?そ、それはいかん!もう1度、考えてみなさい。 </RadioCardDescription> </RadioCard> </RadioCardGroup> <RadioCardGroup variant="surface" isInvalid items={items} /> <Fieldset errorMessage="This is required." isInvalid legend="Which characters would you like to select?" > <RadioCardGroup items={items} /> </Fieldset> </VStack> )
ラベルをカスタマイズする
編集可能な例
const items = useMemo<RadioCardItem[]>( () => [ { label: ( <VStack alignItems="center" gap="sm"> <ChartLineIcon color="muted" fontSize="3xl" /> <Text>Line Chart</Text> </VStack> ), value: "Line Chart", }, { label: ( <VStack alignItems="center" gap="sm"> <ChartColumnIcon color="muted" fontSize="3xl" /> <Text>Bar Chart</Text> </VStack> ), value: "Bar Chart", }, { label: ( <VStack alignItems="center" gap="sm"> <ChartAreaIcon color="muted" fontSize="3xl" /> <Text>Area Chart</Text> </VStack> ), value: "Area Chart", }, ], [], ) return ( <RadioCardGroup items={items} labelProps={{ flexDirection: "column", gap: "sm" }} /> )
編集可能な例
<RadioCardGroup> <RadioCard description="This user can access the system" label={ <VStack gap="sm"> <ArrowRightIcon fontSize="2xl" /> <Text>Arrow</Text> </VStack> } value="Arrow" labelProps={{ alignItems: "start", }} /> <RadioCard description="This user will be denied access to the system" label={ <VStack gap="sm"> <ShieldOffIcon fontSize="2xl" /> <Text>Deny</Text> </VStack> } value="Deny" labelProps={{ alignItems: "start", }} /> <RadioCard description="This user will be locked out of the system" label={ <VStack gap="sm"> <LockIcon fontSize="2xl" /> <Text>Lock</Text> </VStack> } value="Lock" labelProps={{ alignItems: "start", }} /> </RadioCardGroup>
編集可能な例
<RadioCardGroup w="fit-content" withIcon={false}> <RadioCard value="Rabbit"> <RadioCardLabel> <HStack gap="sm"> <RabbitIcon color="muted" fontSize="2xl" /> <Text>Rabbit</Text> </HStack> </RadioCardLabel> </RadioCard> <RadioCard value="Snail"> <HStack gap="sm"> <SnailIcon color="muted" fontSize="2xl" /> <Text>Snail</Text> </HStack> </RadioCard> <RadioCard value="Squirrel"> <RadioCardLabel> <HStack gap="sm"> <SquirrelIcon color="muted" fontSize="2xl" /> <Text>Squirrel</Text> </HStack> </RadioCardLabel> </RadioCard> </RadioCardGroup>
制御する
編集可能な例
const [value, setValue] = useState<string>("フローラ") const items = useMemo<RadioCardItem[]>( () => [ { label: "ビアンカ", value: "ビアンカ" }, { label: "フローラ", value: "フローラ" }, { label: "ルドマン", value: "ルドマン" }, ], [], ) return <RadioCardGroup items={items} value={value} onChange={setValue} />
React Hook Form
を使う
編集可能な例
type Data = { radioCard: string } const { control, handleSubmit, watch, formState: { errors }, } = useForm<Data>() const items = useMemo<RadioCardItem[]>( () => [ { label: "ビアンカ", value: "ビアンカ" }, { label: "フローラ", value: "フローラ" }, { label: "ルドマン", value: "ルドマン" }, ], [], ) const onSubmit = (data) => console.log("submit:", data) console.log("watch:", watch()) return ( <VStack as="form" onSubmit={handleSubmit(onSubmit)}> <Fieldset isInvalid={!!errors.radioCard} legend="Who is your favorite character?" errorMessage={errors.radioCard ? errors.radioCard.message : undefined} > <Controller name="radioCard" control={control} rules={{ required: { value: true, message: "This is required." } }} render={({ field }) => <RadioCardGroup {...field} items={items} />} /> </Fieldset> <Button type="submit" alignSelf="flex-end"> Submit </Button> </VStack> )
GitHubでこのページを編集する