跳到主要内容

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

属性类型默认值说明
valuestring—当前值(受控)。
defaultValuestring''初始值(非受控)。
onChange(value: string) => void—值变化时触发,参数是新值。
size'sm' | 'md' | 'lg''md'高度 32 / 40 / 48。
typestring'text'原生 input 类型。password 会带显示 / 隐藏按钮。
pillboolean—全圆。
blockbooleantrue撑满容器宽度;false 时为行内宽度。
iconIconName—前置的内置图标。
prefixReactNode—前缀插槽(单位、文字、图标)。
suffixReactNode—后缀插槽。
clearableboolean—有内容时显示清除按钮。
clearLabelstring'清除'清除按钮的可读名称。
onClear() => void—点击清除按钮后触发(此前 onChange 已收到空字符串)。
revealablebooleantruetype="password" 时是否显示“显示密码”按钮。
invalidboolean—校验失败:标红并设置 aria-invalid。在 Field 里默认跟随 Field。
rootClassName / rootStylestring / CSSProperties—外框的类名与样式。className / style 同样落在外框上。
…restInputHTMLAttributes—其余原生属性和 ref 落在里面的 <input> 上。

SearchInput

属性类型默认值说明
onSearch(value: string) => void—按下 Enter 时触发。
pillbooleantrue默认全圆。
clearablebooleantrue默认带清除按钮。
placeholderstring'搜索…'占位文字。
…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 播报。