Select 选择器组件 #
基本用法 #
jsx
import { Select } from '@chakra-ui/react'
function Example() {
return (
<Select placeholder="请选择选项">
<option value="option1">选项 1</option>
<option value="option2">选项 2</option>
<option value="option3">选项 3</option>
</Select>
)
}
选择器尺寸 #
jsx
<Select size="xs" placeholder="超小选择器">
<option>选项</option>
</Select>
<Select size="sm" placeholder="小选择器">
<option>选项</option>
</Select>
<Select size="md" placeholder="中等选择器(默认)">
<option>选项</option>
</Select>
<Select size="lg" placeholder="大选择器">
<option>选项</option>
</Select>
选择器变体 #
jsx
<Select variant="outline" placeholder="轮廓选择器(默认)">
<option>选项</option>
</Select>
<Select variant="filled" placeholder="填充选择器">
<option>选项</option>
</Select>
<Select variant="flushed" placeholder="下划线选择器">
<option>选项</option>
</Select>
<Select variant="unstyled" placeholder="无样式选择器">
<option>选项</option>
</Select>
选择器状态 #
禁用状态 #
jsx
<Select isDisabled placeholder="禁用选择器">
<option>选项</option>
</Select>
错误状态 #
jsx
<Select isInvalid placeholder="错误选择器">
<option>选项</option>
</Select>
只读状态 #
jsx
<Select isReadOnly placeholder="只读选择器">
<option>选项</option>
</Select>
受控选择器 #
jsx
function ControlledSelect() {
const [value, setValue] = useState('')
return (
<Select
value={value}
onChange={(e) => setValue(e.target.value)}
placeholder="选择选项"
>
<option value="option1">选项 1</option>
<option value="option2">选项 2</option>
<option value="option3">选项 3</option>
</Select>
)
}
配合 FormControl #
jsx
import { FormControl, FormLabel, FormHelperText } from '@chakra-ui/react'
<FormControl>
<FormLabel>选择国家</FormLabel>
<Select placeholder="请选择国家">
<option value="china">中国</option>
<option value="usa">美国</option>
<option value="uk">英国</option>
</Select>
<FormHelperText>请选择您所在的国家</FormHelperText>
</FormControl>
选项分组 #
jsx
<Select placeholder="选择城市">
<optgroup label="中国">
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
<option value="guangzhou">广州</option>
</optgroup>
<optgroup label="美国">
<option value="newyork">纽约</option>
<option value="losangeles">洛杉矶</option>
</optgroup>
</Select>
自定义图标 #
jsx
<Select
icon={<ChevronDownIcon />}
iconColor="blue.500"
iconSize="20px"
placeholder="选择选项"
>
<option>选项 1</option>
<option>选项 2</option>
</Select>
自定义样式 #
jsx
<Select
focusBorderColor="blue.500"
errorBorderColor="red.500"
placeholder="选择选项"
>
<option>选项</option>
</Select>
实用示例 #
省市选择 #
jsx
function ProvinceSelect() {
const [province, setProvince] = useState('')
const [city, setCity] = useState('')
const cities = {
beijing: ['东城区', '西城区', '朝阳区', '海淀区'],
shanghai: ['黄浦区', '徐汇区', '浦东新区'],
guangzhou: ['天河区', '越秀区', '白云区'],
}
return (
<HStack spacing={4}>
<FormControl>
<FormLabel>省份</FormLabel>
<Select
value={province}
onChange={(e) => {
setProvince(e.target.value)
setCity('')
}}
placeholder="选择省份"
>
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
<option value="guangzhou">广州</option>
</Select>
</FormControl>
<FormControl>
<FormLabel>城市</FormLabel>
<Select
value={city}
onChange={(e) => setCity(e.target.value)}
placeholder="选择城市"
isDisabled={!province}
>
{(cities[province] || []).map((c) => (
<option key={c} value={c}>{c}</option>
))}
</Select>
</FormControl>
</HStack>
)
}
数量选择 #
jsx
function QuantitySelect({ value, onChange, max = 10 }) {
return (
<FormControl>
<FormLabel>数量</FormLabel>
<Select
value={value}
onChange={(e) => onChange(Number(e.target.value))}
>
{Array.from({ length: max }, (_, i) => i + 1).map((n) => (
<option key={n} value={n}>{n}</option>
))}
</Select>
</FormControl>
)
}
排序选择 #
jsx
function SortSelect({ value, onChange }) {
return (
<Select
value={value}
onChange={(e) => onChange(e.target.value)}
size="sm"
w="auto"
>
<option value="newest">最新发布</option>
<option value="price-asc">价格从低到高</option>
<option value="price-desc">价格从高到低</option>
<option value="popular">最受欢迎</option>
</Select>
)
}
每页显示数量 #
jsx
function PageSizeSelect({ value, onChange }) {
return (
<HStack>
<Text>每页显示</Text>
<Select
value={value}
onChange={(e) => onChange(Number(e.target.value))}
size="sm"
w="auto"
>
<option value={10}>10</option>
<option value={20}>20</option>
<option value={50}>50</option>
<option value={100}>100</option>
</Select>
<Text>条</Text>
</HStack>
)
}
Select 属性速查表 #
| 属性 | 说明 | 值 |
|---|---|---|
| variant | 变体 | outline, filled, flushed, unstyled |
| size | 尺寸 | xs, sm, md, lg |
| isDisabled | 禁用 | true, false |
| isInvalid | 错误 | true, false |
| isReadOnly | 只读 | true, false |
| placeholder | 占位文字 | string |
| icon | 自定义图标 | React 元素 |
| iconColor | 图标颜色 | 颜色值 |
| iconSize | 图标大小 | 尺寸值 |
下一步 #
现在你已经掌握了 Select 组件,接下来学习 Checkbox 复选框,了解如何使用复选框组件!
最后更新:2026-03-28