定价

SelectButton

以按钮形式提供单项下拉选择,适合工具栏、筛选入口和需要紧凑展示的选项切换。

我们正在让 SnowUI 组件成为 AI 对话中可直接操作的界面。目前对话交互能力仍在建设中;本页展示网站用法,支持的对话平台与组件版本将在验证后公布。 AI 对话内生成和使用 SnowUI 界面完全免费,不属于项目,不占项目或开发者席位额度,无需 SnowUI 注册、激活或付费证明。

如何使用

用于按钮触发的选择或命令菜单。表单字段式单选用 Select;多项操作随宽度收纳用 OverflowActions。

  • options 提供唯一字符串 value;label 定制触发按钮文字,children 用来替换列表。

  • action 模式不更新 value 或触发 onchange;根级 Props 配置按钮,parts 不提供 Button 入口。

导入

import { SelectButton } from '@snowui-design-system/components';

用法

变体

API 参考

属性 类型 默认值 示例 描述
value SelectValue — value={value} 当前选中值(string、number 或 undefined),支持 bind:value;优先于 defaultValue,实际选项选择写入字符串。action 模式不保存选择。
defaultValue SelectValue — defaultValue={value} value 未定义时的回退选中值;仅 persistent 模式用于选择显示,首次选择后由 value 驱动。
options SelectOption[] [] options={options} 选项数据:每项包含字符串 value、label 及可选 disabled;默认生成 MenuItem。显式 children 提供列表时使用其选项注册。
placeholder string — placeholder="Search…" 未选中时的提示文字;action 模式触发器始终显示该文字。没有 label、选项文字或 placeholder 时触发器文字为空。
name string — name="Example" 表单字段名;仅提供非空 name 时创建 hidden input,提交当前选中值的字符串形式。
form string — form="Example" hidden input 所属表单的 id,可关联组件外部表单;仅设置 name 生成输入后生效。
required boolean false required 传入 Select 的必填标记;当前实现未将其接入原生约束校验,也不会阻止空值提交,业务需自行验证。
disabled boolean false disabled 禁用触发按钮并阻止打开或切换选项;当前 hidden input 不随该标记禁用,已有值仍可随表单提交。
readonly boolean false readonly 阻止用户通过触发器打开或改变选项,保留显示与外部 value 更新;不会禁用 hidden input。
invalid boolean false invalid 将无效状态传给 Select wrapper;当前 Button 触发器不自动增加错误边框或 aria-invalid,不能代替业务校验与错误说明。
ariaLabel string — ariaLabel="Example" 触发 Button 的可访问名称;不提供可见 label 时应设置。
showIndicator boolean true showIndicator 显示下拉指示器;false 时连同自定义 indicator 一起隐藏,选择能力不受影响。
search boolean false search 开启默认 Listbox 内置搜索;parts.Listbox.search 可覆盖。显式 children 模式应在自己的 Listbox 上配置搜索。
selectionMode "persistent" | "action" "persistent" selectionMode="persistent" persistent 保存选中值并显示选项文字;action 只触发 onAction、关闭列表且保持 placeholder,不更新 value 或触发 onchange。
label Snippet<[SelectButtonLabelContext]> — label={labelContent} 替换触发器文字;参数包含 value、option、label、placeholder,保留指示器和按钮交互。
indicator Snippet<[SelectButtonIndicatorContext]> — indicator={indicatorContent} 替换指示图形,参数为 open、disabled;仅 showIndicator=true 时渲染。
children Snippet — <SelectButton>Content</SelectButton> 显式 Listbox/MenuItem 内容,替换默认列表;不作为按钮文字使用,文字定制请用 label。
parts ComponentPartsOf<{ Listbox: typeof Listbox; Input: typeof Input; MenuItem: typeof MenuItem; }> — parts={partsOptions} 配置默认内建列表、搜索输入和选项;不提供 parts.Button,按钮样式在根级传入。显式 children 自行配置所属子项。
onchange (event: Event) => void — onchange={(value) => { /* handle value */ }} persistent 模式选中不同值后调用,参数为 change Event;用 bind:value 读取新值,重复选择与 action 模式不触发。
onAction (value: string) => void — onAction={(value) => { /* handle value */ }} 仅 action 模式在执行选项后接收其 value;列表随后保持关闭,组件不保存选中值。
onclick (event: MouseEvent) => void — onclick={(value) => { /* handle value */ }} 触发器完成打开或关闭后调用;disabled/readonly 时不调用,不能通过 preventDefault() 撤销已执行的切换。
onkeydown (event: KeyboardEvent) => void — onkeydown={(value) => { /* handle value */ }} 组件处理方向键、Enter、Escape 等选择键盘逻辑后调用;readonly 分支也会转交按键,不能据此取消已发生的内部操作。