Components
- 手风琴
- 提示
- 警告对话框
- 宽高比
- 头像
- 徽章
- 面包屑导航
- 按钮
- 按钮组
- 日历 Calendar
- 卡片
- Carousel
- 图表 Chart
- 复选框
- 折叠面板
- 组合框
- 命令
- 上下文菜单
- 数据表格 Data Table
- 日期选择器 Date Picker
- 对话框 Dialog
- 抽屉
- 下拉菜单
- Empty
- 字段
- 悬停卡片
- 输入
- 输入组
- 输入 OTP
- 项目
- Kbd
- 标签
- 菜单栏
- 原生选择框
- 导航菜单 Navigation Menu
- 分页
- 弹出框
- 进度 Progress
- 单选框组
- 可调整大小
- 滚动区域 Scroll Area
- 选择框
- 分隔符 Separator
- 侧边栏 Sheet
- 侧边栏 Sidebar
- 骨架屏
- 滑块
- Sonner
- 加载指示器 Spinner
- 开关
- 表格
- 标签页 Tabs
- 文本域
- 吐司
- 切换按钮 Toggle
- 切换组
- 提示 Tooltip
- 排版
"use client"
import {安装
pnpm dlx shadcn@latest add combobox
用法
import {
Combobox,
ComboboxContent,
ComboboxEmpty,
ComboboxInput,
ComboboxItem,
ComboboxList,
} from "@/components/ui/combobox"const frameworks = ["Next.js", "SvelteKit", "Nuxt.js", "Remix", "Astro"]
export function ExampleCombobox() {
return (
<Combobox items={frameworks}>
<ComboboxInput placeholder="选择一个框架" />
<ComboboxContent>
<ComboboxEmpty>未找到项目。</ComboboxEmpty>
<ComboboxList>
{(item) => (
<ComboboxItem key={item} value={item}>
{item}
</ComboboxItem>
)}
</ComboboxList>
</ComboboxContent>
</Combobox>
)
}自定义项
当您的项目是对象时,请使用 itemToStringValue。
import * as React from "react"
import {
Combobox,
ComboboxContent,
ComboboxEmpty,
ComboboxInput,
ComboboxItem,
ComboboxList,
} from "@/components/ui/combobox"
type Framework = {
label: string
value: string
}
const frameworks: Framework[] = [
{ label: "Next.js", value: "next" },
{ label: "SvelteKit", value: "sveltekit" },
{ label: "Nuxt", value: "nuxt" },
]
export function ExampleComboboxCustomItems() {
return (
<Combobox
items={frameworks}
itemToStringValue={(framework) => framework.label}
>
<ComboboxInput placeholder="选择一个框架" />
<ComboboxContent>
<ComboboxEmpty>未找到项目。</ComboboxEmpty>
<ComboboxList>
{(framework) => (
<ComboboxItem key={framework.value} value={framework}>
{framework.label}
</ComboboxItem>
)}
</ComboboxList>
</ComboboxContent>
</Combobox>
)
}多选
使用 multiple 和标签实现多选行为。
import * as React from "react"
import {
Combobox,
ComboboxChip,
ComboboxChips,
ComboboxChipsInput,
ComboboxContent,
ComboboxEmpty,
ComboboxInput,
ComboboxItem,
ComboboxList,
ComboboxValue,
} from "@/components/ui/combobox"
const frameworks = ["Next.js", "SvelteKit", "Nuxt.js", "Remix", "Astro"]
export function ExampleComboboxMultiple() {
const [value, setValue] = React.useState<string[]>([])
return (
<Combobox
items={frameworks}
multiple
value={value}
onValueChange={setValue}
>
<ComboboxChips>
<ComboboxValue>
{value.map((item) => (
<ComboboxChip key={item}>{item}</ComboboxChip>
))}
</ComboboxValue>
<ComboboxChipsInput placeholder="添加框架" />
</ComboboxChips>
<ComboboxContent>
<ComboboxEmpty>未找到项目。</ComboboxEmpty>
<ComboboxList>
{(item) => (
<ComboboxItem key={item} value={item}>
{item}
</ComboboxItem>
)}
</ComboboxList>
</ComboboxContent>
</Combobox>
)
}例子
基本
一个包含框架列表的简单组合框。
"use client"
import {多选
使用 multiple 和 ComboboxChips 的多选组合框。
Next.js
"use client"
import * as React from "react"清除按钮
使用 showClear 属性显示清除按钮。
"use client"
import {分组
使用 ComboboxGroup 和 ComboboxSeparator 来分组项目。
"use client"
import {自定义项目
您可以在 ComboboxItem 内渲染自定义组件。
"use client"
import {无效状态
使用 aria-invalid 属性使组合框处于无效状态。
"use client"
import {禁用
使用 disabled 属性禁用组合框。
"use client"
import {自动高亮
使用 autoHighlight 属性在过滤时自动高亮第一个项目。
"use client"
import {弹出式
您可以通过 render 属性,使用按钮或其他组件触发组合框。将 ComboboxInput 移动到 ComboboxContent 内。
"use client"
import { Button } from "@/components/ui/button"输入组
您可以在 ComboboxInput 内使用 InputGroupAddon 组件为组合框添加附加内容。
"use client"
import {API 参考
更多信息请参见 Base UI 文档。