MultiAutocomplete
MultiAutocomplete
は、ユーザーのテキスト入力に応じて候補を表示し、複数の値を取得するために使用されるコンポーネントです。
インポート
import {MultiAutocomplete,AutocompleteOptionGroup,AutocompleteOption,} from "@yamada-ui/react"
使い方
オプションのリストから1つを選択したい場合は、Autocompleteをご覧ください。
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択"> <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete>
または、items
を設定することでAutocompleteOption
を省略することができます。
編集可能な例
const items: AutocompleteItem[] = [ { label: "孫悟空", value: "孫悟空" }, { label: "ベジータ", value: "ベジータ" }, { label: "フリーザ", value: "フリーザ" }, ] return <MultiAutocomplete placeholder="キャラクターを選択" items={items} />
バリアントを変更する
編集可能な例
<VStack> <MultiAutocomplete variant="outline" placeholder="outline" /> <MultiAutocomplete variant="filled" placeholder="filled" /> <MultiAutocomplete variant="flushed" placeholder="flushed" /> <MultiAutocomplete variant="unstyled" placeholder="unstyled" /> </VStack>
サイズを変更する
編集可能な例
<VStack> <MultiAutocomplete placeholder="extra small size" size="xs" /> <MultiAutocomplete placeholder="small size" size="sm" /> <MultiAutocomplete placeholder="medium size" size="md" /> <MultiAutocomplete placeholder="large size" size="lg" /> </VStack>
デフォルトの値を設定する
デフォルトの値を設定する場合は、defaultValue
に文字列の配列を設定します。
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択" defaultValue={["ベジータ"]}> <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete>
ドロップダウンにヘッダーを追加する
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択" header={ <Center pt="2" px="3"> ここにヘッダーが追加されます </Center> } > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete>
ドロップダウンにフッターを追加する
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択" footer={ <Center pb="2" px="3"> ここにフッターが追加されます </Center> } > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete>
空のメッセージを設定する
項目がない場合に表示するメッセージを設定するには、emptyMessage
プロパティを使用します。
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択" emptyMessage="キャラクターが存在しません" > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete>
新しい項目の作成を許可する
新しい項目の作成を許可する場合は、allowCreate
をtrue
に設定します。
編集可能な例
const items: AutocompleteItem[] = [ { label: "ベジータ", value: "ベジータ" }, { label: "地球人", items: [ { label: "孫悟空", value: "孫悟空" }, { label: "孫悟飯", value: "孫悟飯" }, { label: "クリリン", value: "クリリン" }, ], }, { label: "フリーザ軍", items: [ { label: "フリーザ", value: "フリーザ" }, { label: "ギニュー", value: "ギニュー" }, { label: "リクーム", value: "リクーム" }, { label: "バータ", value: "バータ" }, { label: "ジース", value: "ジース" }, { label: "グルド", value: "グルド" }, ], }, ] return ( <MultiAutocomplete placeholder="キャラクターを選択" items={items} allowCreate /> )
MultiAutocomplete
コンポーネントは、内部的にchildren
を優先して使用します。allowCreate
がtrue
に設定されている場合、新しい項目を作成する機能が正しく反映されない可能性があります。この機能を利用したい場合はchildren
の代わりにitems
を設定して、選択肢のリストを設定する必要があります。
作成された項目の挿入位置を変更する
作成された項目の挿入位置を変更する場合は、insertPositionItem
にfirst
やlast
などを設定します。デフォルトでは、first
が設定されています。
first
: リストの先頭に挿入されます。last
: リストの最後尾に挿入されます。[グループ名, first | last]
: 特定のグループの先頭または最後尾に挿入したい場合は、グループ名とfirst
またはlast
を設定します。
編集可能な例
const items: AutocompleteItem[] = [ { label: "ベジータ", value: "ベジータ" }, { label: "地球人", items: [ { label: "孫悟空", value: "孫悟空" }, { label: "孫悟飯", value: "孫悟飯" }, { label: "クリリン", value: "クリリン" }, ], }, { label: "フリーザ軍", items: [ { label: "フリーザ", value: "フリーザ" }, { label: "ギニュー", value: "ギニュー" }, { label: "リクーム", value: "リクーム" }, { label: "バータ", value: "バータ" }, { label: "ジース", value: "ジース" }, { label: "グルド", value: "グルド" }, ], }, ] return ( <VStack> <MultiAutocomplete placeholder="キャラクターを選択" items={items} allowCreate insertPositionItem="first" /> <MultiAutocomplete placeholder="キャラクターを選択" items={items} allowCreate insertPositionItem="last" /> <MultiAutocomplete placeholder="キャラクターを選択" items={items} allowCreate insertPositionItem="地球人" /> <MultiAutocomplete placeholder="キャラクターを選択" items={items} allowCreate insertPositionItem={["フリーザ軍", "last"]} /> </VStack> )
自由な入力を許可する
デフォルトでは、ブラー時に候補にない値はクリアされます。候補にない値をクリアせず、自由な入力を許可する場合は、allowFree
をtrue
に設定します。
編集可能な例
const items: AutocompleteItem[] = [ { label: "ベジータ", value: "ベジータ" }, { label: "地球人", items: [ { label: "孫悟空", value: "孫悟空" }, { label: "孫悟飯", value: "孫悟飯" }, { label: "クリリン", value: "クリリン" }, ], }, { label: "フリーザ軍", items: [ { label: "フリーザ", value: "フリーザ" }, { label: "ギニュー", value: "ギニュー" }, { label: "リクーム", value: "リクーム" }, { label: "バータ", value: "バータ" }, { label: "ジース", value: "ジース" }, { label: "グルド", value: "グルド" }, ], }, ] return ( <MultiAutocomplete placeholder="キャラクターを選択" items={items} allowFree /> )
ボーダーのカラーを変更する
ボーダーのカラーを変更する場合は、focusBorderColor
またはerrorBorderColor
にカラーを設定します。
編集可能な例
<VStack> <MultiAutocomplete focusBorderColor="green.500" placeholder="custom border color" > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> <MultiAutocomplete isInvalid errorBorderColor="orange.500" placeholder="custom border color" > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> </VStack>
区切りをカスタマイズする
区切りをカスタマイズする場合は、separator
に文字列を設定します。
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択" separator=";"> <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete>
プレースホルダーを常に表示する
プレースホルダーを常に表示する場合は、keepPlaceholder
をtrue
に設定します。
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択" keepPlaceholder> <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete>
カスタムコンポーネントを使用する
カスタムコンポーネントを使用する場合は、component
にReactElement
を設定します。component
は、value
, label
, index
, onRemove
を提供します。
編集可能な例
<VStack> <MultiAutocomplete placeholder="キャラクターを選択" component={({ label }) => <Tag>{label}</Tag>} > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> <MultiAutocomplete placeholder="キャラクターを選択" component={({ label, onRemove }) => <Tag onClose={onRemove}>{label}</Tag>} > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> </VStack>
選択済みの値をリストから除外する
選択済みの値をリストから除外する場合は、omitSelectedValues
をtrue
に設定します。
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択" omitSelectedValues={true}> <AutocompleteOptionGroup label="地球人"> <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="孫悟飯">孫悟飯</AutocompleteOption> <AutocompleteOption value="クリリン">クリリン</AutocompleteOption> </AutocompleteOptionGroup> <AutocompleteOptionGroup label="フリーザ軍"> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> <AutocompleteOption value="ギニュー">ギニュー</AutocompleteOption> <AutocompleteOption value="リクーム">リクーム</AutocompleteOption> <AutocompleteOption value="バータ">バータ</AutocompleteOption> <AutocompleteOption value="ジース">ジース</AutocompleteOption> <AutocompleteOption value="グルド">グルド</AutocompleteOption> </AutocompleteOptionGroup> </MultiAutocomplete>
選択可能な最大数を設定する
選択可能な最大数を設定する場合は、maxSelectValues
に数値を設定します。
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択" maxSelectValues={3}> <AutocompleteOptionGroup label="地球人"> <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="孫悟飯">孫悟飯</AutocompleteOption> <AutocompleteOption value="クリリン">クリリン</AutocompleteOption> </AutocompleteOptionGroup> <AutocompleteOptionGroup label="フリーザ軍"> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> <AutocompleteOption value="ギニュー">ギニュー</AutocompleteOption> <AutocompleteOption value="リクーム">リクーム</AutocompleteOption> <AutocompleteOption value="バータ">バータ</AutocompleteOption> <AutocompleteOption value="ジース">ジース</AutocompleteOption> <AutocompleteOption value="グルド">グルド</AutocompleteOption> </AutocompleteOptionGroup> </MultiAutocomplete>
選択時にドロップダウンリストを閉じる
選択時にドロップダウンリストを閉じる場合は、closeOnSelect
をtrue
に設定します。
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択" closeOnSelect={true}> <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete>
クリアを無効化する
クリアを無効化する場合は、isClearable
をfalse
に設定します。
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択" isClearable={false}> <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete>
表示位置を変更する
表示位置を変更するには、placement
にtop
やleft-start
などを設定します。デフォルトでは、bottom
が設定されています。
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択" placement="right-start" maxW="xs" > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete>
オフセットを変更する
要素の大きさやシチュエーションによっては、ツールチップの位置を変更したい場合があります。その場合は、gutter
またはoffset
で位置を調整します。
gutter
は、単純な要素との差を設定でき、offset
は、[横軸, 縦軸]
を設定できます。
編集可能な例
<VStack> <MultiAutocomplete placeholder="キャラクターを選択" duration={0.4}> <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> <MultiAutocomplete placeholder="キャラクターを選択" gutter={32}> <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> </VStack>
無効化する
無効化する場合は、isDisabled
をtrue
に設定します。
編集可能な例
<> <MultiAutocomplete isDisabled variant="outline" placeholder="outline" /> <MultiAutocomplete isDisabled variant="filled" placeholder="filled" /> <MultiAutocomplete isDisabled variant="flushed" placeholder="flushed" /> <MultiAutocomplete isDisabled variant="unstyled" placeholder="unstyled" /> <FormControl isDisabled label="Which notifications would you like to receive?" > <MultiAutocomplete placeholder="Autocomplete notifications" /> </FormControl> </>
オプションを無効にする場合は、AutocompleteOption
にisDisabled
をtrue
に設定します。
編集可能な例
<MultiAutocomplete placeholder="キャラクターを選択"> <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ" isDisabled> ベジータ </AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete>
読み取り専用にする
読み取り専用にする場合は、isReadOnly
をtrue
に設定します。
編集可能な例
<> <MultiAutocomplete isReadOnly variant="outline" placeholder="outline" /> <MultiAutocomplete isReadOnly variant="filled" placeholder="filled" /> <MultiAutocomplete isReadOnly variant="flushed" placeholder="flushed" /> <MultiAutocomplete isReadOnly variant="unstyled" placeholder="unstyled" /> <FormControl isReadOnly label="Which notifications would you like to receive?" > <MultiAutocomplete placeholder="Autocomplete notifications" /> </FormControl> </>
無効な入力にする
無効な入力にする場合は、isInvalid
をtrue
に設定します。
編集可能な例
<> <MultiAutocomplete isInvalid variant="outline" placeholder="outline" /> <MultiAutocomplete isInvalid variant="filled" placeholder="filled" /> <MultiAutocomplete isInvalid variant="flushed" placeholder="flushed" /> <MultiAutocomplete isInvalid variant="unstyled" placeholder="unstyled" /> <FormControl isInvalid label="Which notifications would you like to receive?" errorMessage="This is required." > <MultiAutocomplete placeholder="Autocomplete notifications" /> </FormControl> </>
オプションをカスタマイズする
アイコンをカスタマイズする場合は、iconProps
またはclearIconProps
にprops
を設定します。
編集可能な例
<VStack> <MultiAutocomplete placeholder="キャラクターを選択" iconProps={{ color: "primary" }} > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> <MultiAutocomplete placeholder="キャラクターを選択" iconProps={{ children: <ChevronsDown /> }} > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> <MultiAutocomplete placeholder="キャラクターを選択" clearIconProps={{ children: <Trash w="0.5em" /> }} > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> </VStack>
オプションをカスタマイズする
オプションをカスタマイズするには、optionProps
プロパティを使用します。
編集可能な例
<VStack> <MultiAutocomplete placeholder="キャラクターを選択" optionProps={{ color: "primary" }} > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> <MultiAutocomplete placeholder="キャラクターを選択" optionProps={{ icon: <Check color="green.500" /> }} > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> </VStack>
制御する
編集可能な例
const [value, onChange] = useState<string[]>(["孫悟空"]) return ( <MultiAutocomplete placeholder="キャラクターを選択" value={value} onChange={onChange} > <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> )
React Hook Form
を使う
編集可能な例
const { control, handleSubmit, watch, formState: { errors }, } = useForm<Data>() const onSubmit: SubmitHandler<Data> = (data) => console.log("submit:", data) console.log("watch:", watch()) return ( <VStack as="form" onSubmit={handleSubmit(onSubmit)}> <FormControl isInvalid={!!errors.autocomplete} label="Who is your favorite character?" errorMessage={ errors.autocomplete ? errors.autocomplete.message : undefined } > <Controller name="autocomplete" control={control} rules={{ required: { value: true, message: "This is required." } }} render={({ field }) => ( <MultiAutocomplete placeholder="キャラクターを選択" {...field}> <AutocompleteOption value="孫悟空">孫悟空</AutocompleteOption> <AutocompleteOption value="ベジータ">ベジータ</AutocompleteOption> <AutocompleteOption value="フリーザ">フリーザ</AutocompleteOption> </MultiAutocomplete> )} /> </FormControl> <Button type="submit" alignSelf="flex-end"> Submit </Button> </VStack> )
GitHubでこのページを編集する