Input 输入框Input · SearchInput
收集一行文字:姓名、邮箱、密码、搜索词。多行内容用 Textarea,数字用 NumberInput,从固定选项里挑用 Select。
基本用法
输入框本身没有可见标签。要么放进 Field(推荐,自动接好标签、提示和错误),要么给 aria-label。
用于接收通知
尺寸与形状
高度和按钮一致:32 / 40 / 48。pill 变成全圆;block 默认开启,关掉后变成行内宽度。
图标、前后缀与附加按钮
icon 是前置图标,聚焦时变强调色并放大。prefix / suffix 放单位或固定文字,它们不计入可读名称。clearable 在有内容时显示清除按钮;type="password" 自带显示 / 隐藏按钮。
https://.oink.dev
元
状态
invalid 只负责标红和 aria-invalid;错误文字交给 Field 的 error,它会展开并通过 aria-live 播报。
邮箱格式不正确
受控用法
onChange 的第一个参数是新值(字符串),不是事件。
长度:4
搜索框
SearchInput 是预设好的 Input:全圆、带放大镜和清除按钮、type="search"。Enter 触发 onSearch,Esc 清空。
输入后按 Enter 搜索,Esc 清空
尺寸与禁用
规格
- 尺寸
- 高 40,大号 48,和按钮等高 · 圆角 14 / 全圆
- 聚焦
- 边框变强调色 · 240ms ease-out,无光晕
- 图标
- 聚焦时变强调色并放大 1.1× · bouncy
- 校验
- 失败时抖动 + 提示高度展开(配合 Field)
API
Input
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
value | string | — | 当前值(受控)。 |
defaultValue | string | '' | 初始值(非受控)。 |
onChange | (value: string) => void | — | 值变化时触发,参数是新值。 |
size | 'sm' | 'md' | 'lg' | 'md' | 高度 32 / 40 / 48。 |
type | string | 'text' | 原生 input 类型。password 会带显示 / 隐藏按钮。 |
pill | boolean | — | 全圆。 |
block | boolean | true | 撑满容器宽度;false 时为行内宽度。 |
icon | IconName | — | 前置的内置图标。 |
prefix | ReactNode | — | 前缀插槽(单位、文字、图标)。 |
suffix | ReactNode | — | 后缀插槽。 |
clearable | boolean | — | 有内容时显示清除按钮。 |
clearLabel | string | '清除' | 清除按钮的可读名称。 |
onClear | () => void | — | 点击清除按钮后触发(此前 onChange 已收到空字符串)。 |
revealable | boolean | true | type="password" 时是否显示“显示密码”按钮。 |
invalid | boolean | — | 校验失败:标红并设置 aria-invalid。在 Field 里默认跟随 Field。 |
rootClassName / rootStyle | string / CSSProperties | — | 外框的类名与样式。className / style 同样落在外框上。 |
…rest | InputHTMLAttributes | — | 其余原生属性和 ref 落在里面的 <input> 上。 |
SearchInput
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
onSearch | (value: string) => void | — | 按下 Enter 时触发。 |
pill | boolean | true | 默认全圆。 |
clearable | boolean | true | 默认带清除按钮。 |
placeholder | string | '搜索…' | 占位文字。 |
… | InputProps | — | 其余同 Input(type、icon、revealable 已固定)。 |
无障碍
- 里面是原生
<input>,角色随 type 而定(文本框是 textbox,SearchInput 是 searchbox)。 - 必须有可读名称:放进带 label 的 Field,或给
aria-label/aria-labelledby。占位文字不算名称。 - 前后缀是普通文字,不参与命名;点在外框空白处同样聚焦输入框。
- Tab 依次经过输入框、清除按钮(有内容时)和显示密码按钮。显示密码按钮用
aria-pressed表达状态。 - SearchInput:Enter 触发搜索,Esc 在有内容时清空(并阻止事件默认行为)。
- 校验失败时设置
aria-invalid;在 Field 里错误文字通过aria-describedby关联并由 aria-live 播报。