组件
- 手风琴 Accordion
- 警告对话框 Alert Dialog
- 警告 Alert
- 宽高比 Aspect Ratio
- 头像 Avatar
- 徽章 Badge
- 面包屑 Breadcrumb
- 按钮组 Button Group
- 按钮 Button
- 日历 Calendar
- 卡片 Card
- 轮播图 Carousel
- 图表 Chart
- 复选框 Checkbox
- 折叠面板 Collapsible
- 组合框 Combobox
- 命令菜单 Command
- 上下文菜单 Context Menu
- 数据表格 Data Table
- 日期选择器 Date Picker
- 对话框 Dialog
- 抽屉 Drawer
- 下拉菜单 Dropdown Menu
- 空状态 Empty
- 字段 Field
- 表单 Form
- 悬停卡片 Hover Card
- 输入组 Input Group
- 一次性密码 OTP
- 输入 Input
- 条目 Item
- 快捷键 Kbd
- 标签 Label
- 菜单栏 Menubar
- 原生选择框
- 导航菜单 Navigation Menu
- 分页 Pagination
- 弹出层 Popover
- 进度 Progress
- 单选框组 Radio Group
- 可调整大小 Resizable
- 滚动区域 Scroll Area
- 选择框 Select
- 分隔符 Separator
- 侧边栏 Sheet
- 侧边栏 Sidebar
- 骨架屏 Skeleton
- 滑块 Slider
- 通知 Sonner
- 加载指示器 Spinner
- 开关 Switch
- 表格 Table
- 标签页 Tabs
- 文本区域 Textarea
- 消息 Toast
- 切换组 Toggle Group
- 切换按钮 Toggle
- 提示 Tooltip
- 排版 Typography
有关样式化选择组件,请参见 Select 组件。
import {
NativeSelect,
NativeSelectOption,
} from "@/components/ui/native-select"
export function NativeSelectDemo() {
return (
<NativeSelect>
<NativeSelectOption value="">Select status</NativeSelectOption>
<NativeSelectOption value="todo">Todo</NativeSelectOption>
<NativeSelectOption value="in-progress">In Progress</NativeSelectOption>
<NativeSelectOption value="done">Done</NativeSelectOption>
<NativeSelectOption value="cancelled">Cancelled</NativeSelectOption>
</NativeSelect>
)
}
安装
pnpm dlx shadcn@latest add native-select
使用方法
import {
NativeSelect,
NativeSelectOptGroup,
NativeSelectOption,
} from "@/components/ui/native-select"<NativeSelect>
<NativeSelectOption value="">请选择水果</NativeSelectOption>
<NativeSelectOption value="apple">苹果</NativeSelectOption>
<NativeSelectOption value="banana">香蕉</NativeSelectOption>
<NativeSelectOption value="blueberry">蓝莓</NativeSelectOption>
<NativeSelectOption value="grapes" disabled>
葡萄
</NativeSelectOption>
<NativeSelectOption value="pineapple">菠萝</NativeSelectOption>
</NativeSelect>示例
带分组
使用 NativeSelectOptGroup 对选项进行分组以便更好分类。
import {
NativeSelect,
NativeSelectOptGroup,
NativeSelectOption,
} from "@/components/ui/native-select"
export function NativeSelectGroups() {
return (
<NativeSelect>
<NativeSelectOption value="">Select department</NativeSelectOption>
<NativeSelectOptGroup label="Engineering">
<NativeSelectOption value="frontend">Frontend</NativeSelectOption>
<NativeSelectOption value="backend">Backend</NativeSelectOption>
<NativeSelectOption value="devops">DevOps</NativeSelectOption>
</NativeSelectOptGroup>
<NativeSelectOptGroup label="Sales">
<NativeSelectOption value="sales-rep">Sales Rep</NativeSelectOption>
<NativeSelectOption value="account-manager">
Account Manager
</NativeSelectOption>
<NativeSelectOption value="sales-director">
Sales Director
</NativeSelectOption>
</NativeSelectOptGroup>
<NativeSelectOptGroup label="Operations">
<NativeSelectOption value="support">
Customer Support
</NativeSelectOption>
<NativeSelectOption value="product-manager">
Product Manager
</NativeSelectOption>
<NativeSelectOption value="ops-manager">
Operations Manager
</NativeSelectOption>
</NativeSelectOptGroup>
</NativeSelect>
)
}
<NativeSelect>
<NativeSelectOption value="">请选择食物</NativeSelectOption>
<NativeSelectOptGroup label="水果">
<NativeSelectOption value="apple">苹果</NativeSelectOption>
<NativeSelectOption value="banana">香蕉</NativeSelectOption>
<NativeSelectOption value="blueberry">蓝莓</NativeSelectOption>
</NativeSelectOptGroup>
<NativeSelectOptGroup label="蔬菜">
<NativeSelectOption value="carrot">胡萝卜</NativeSelectOption>
<NativeSelectOption value="broccoli">西兰花</NativeSelectOption>
<NativeSelectOption value="spinach">菠菜</NativeSelectOption>
</NativeSelectOptGroup>
</NativeSelect>禁用状态
禁用单个选项或整个选择框组件。
import {
NativeSelect,
NativeSelectOption,
} from "@/components/ui/native-select"
export function NativeSelectDisabled() {
return (
<NativeSelect disabled>
<NativeSelectOption value="">Select priority</NativeSelectOption>
<NativeSelectOption value="low">Low</NativeSelectOption>
<NativeSelectOption value="medium">Medium</NativeSelectOption>
<NativeSelectOption value="high">High</NativeSelectOption>
<NativeSelectOption value="critical">Critical</NativeSelectOption>
</NativeSelect>
)
}
无效状态
通过 aria-invalid 属性和错误样式显示验证错误。
import {
NativeSelect,
NativeSelectOption,
} from "@/components/ui/native-select"
export function NativeSelectInvalid() {
return (
<NativeSelect aria-invalid="true">
<NativeSelectOption value="">Select role</NativeSelectOption>
<NativeSelectOption value="admin">Admin</NativeSelectOption>
<NativeSelectOption value="editor">Editor</NativeSelectOption>
<NativeSelectOption value="viewer">Viewer</NativeSelectOption>
<NativeSelectOption value="guest">Guest</NativeSelectOption>
</NativeSelect>
)
}
<NativeSelect aria-invalid="true">
<NativeSelectOption value="">请选择国家</NativeSelectOption>
<NativeSelectOption value="us">美国</NativeSelectOption>
<NativeSelectOption value="uk">英国</NativeSelectOption>
<NativeSelectOption value="ca">加拿大</NativeSelectOption>
</NativeSelect>表单集成
可与 React Hook Form 等表单库结合使用,实现受控组件。
Component native-select-form not found in registry.
输入组集成
与 InputGroup 组合使用,实现复杂的输入布局。
Component native-select-input-group not found in registry.
原生选择框 与 选择框
- 当需要浏览器原生行为、更高性能或移动端优化下拉时,使用
NativeSelect。 - 当需要自定义样式、动画或复杂交互时,使用
Select。
NativeSelect 组件提供原生 HTML 选择功能,并带有与设计系统一致的样式。
可访问性
- 组件保留了所有原生 HTML 选择框的无障碍功能。
- 屏幕阅读器可使用箭头键浏览选项。
- 下拉箭头图标设置为
aria-hidden="true"以避免重复朗读。 - 需要时使用
aria-label或aria-labelledby提供额外上下文。
<NativeSelect aria-label="选择你偏好的语言">
<NativeSelectOption value="en">英语</NativeSelectOption>
<NativeSelectOption value="es">西班牙语</NativeSelectOption>
<NativeSelectOption value="fr">法语</NativeSelectOption>
</NativeSelect>API 参考
NativeSelect
主选择组件,封装了原生 HTML 选择元素。
| 属性 | 类型 | 默认值 |
|---|---|---|
className | string |
其他所有属性都会传递到底层的 <select> 元素。
<NativeSelect>
<NativeSelectOption value="option1">选项 1</NativeSelectOption>
<NativeSelectOption value="option2">选项 2</NativeSelectOption>
</NativeSelect>NativeSelectOption
表示选择框中的单个选项。
| 属性 | 类型 | 默认值 |
|---|---|---|
value | string | |
disabled | boolean | false |
className | string |
其他所有属性都会传递到底层的 <option> 元素。
<NativeSelectOption value="apple">苹果</NativeSelectOption>
<NativeSelectOption value="banana" disabled>
香蕉
</NativeSelectOption>NativeSelectOptGroup
将相关选项分组以便更好地组织。
| 属性 | 类型 | 默认值 |
|---|---|---|
label | string | |
disabled | boolean | false |
className | string |
其他所有属性都会传递到底层的 <optgroup> 元素。
<NativeSelectOptGroup label="水果">
<NativeSelectOption value="apple">苹果</NativeSelectOption>
<NativeSelectOption value="banana">香蕉</NativeSelectOption>
</NativeSelectOptGroup>Deploy your shadcn/ui app on Vercel
Trusted by OpenAI, Sonos, Adobe, and more.
Vercel provides tools and infrastructure to deploy apps and features at scale.
Deploy to Vercel