输入
NumberInput
带递增/递减按钮的数值输入框组件
数值输入框(NumberInput)用于精确输入数值,内置递增/递减按钮,支持步进、范围限制、居中布局和自定义图标。
import { NumberInput } from '@skyroc/web-ui';
import type { NumberInputProps, NumberInputClassNames, NumberInputControlProps } from '@skyroc/web-ui';何时使用
- 需要用户输入精确数值时(数量、价格、年龄等)。
- 需要通过按钮快速递增/递减调整数值时。
- 需要限制输入范围(min/max)或设定步进值(step)时。
- 如果只是普通文本输入,优先使用 Input。
基础用法
默认模式下,递增和递减按钮显示在输入框右侧。
Preview
Code
Loading...
<NumberInput placeholder="请输入数字" />居中布局
设置 center 后,减号按钮移至左侧、加号按钮在右侧,输入值居中显示。
Preview
Code
Loading...
<NumberInput center />自定义图标
通过 decrementIcon 和 incrementIcon 替换默认的加减号图标。
Preview
Code
Loading...
<NumberInput
decrementIcon={<Icon icon="lucide:dollar-sign" />}
incrementIcon={<Icon icon="lucide:percent" />}
/>可清除
设置 clearable 后,hover 时显示清除按钮,点击可清空输入值。
Preview
Code
Loading...
<NumberInput clearable />范围限制与步进
通过 min、max 限制输入范围,step 设置每次递增/递减的步进值。到达边界时对应按钮自动禁用。
<NumberInput min={0} max={100} step={5} />受控用法
通过 value + onValueChange 实现受控模式;非受控模式使用 defaultValue。
const [count, setCount] = useState(0);
<NumberInput value={count} onValueChange={setCount} />键盘操作
ArrowUp— 递增ArrowDown— 递减Escape— 失焦
API
NumberInput
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| value | 受控模式的当前值 | number | string | - |
| defaultValue | 非受控模式的默认值 | number | string | - |
| onValueChange | 值变化时的回调 | (value: number | string | undefined) => void | - |
| min | 允许的最小值,到达后递减按钮自动禁用 | number | - |
| max | 允许的最大值,到达后递增按钮自动禁用 | number | - |
| step | 每次递增/递减的步进值 | number | 1 |
| center | 居中布局,减号在左、加号在右、输入居中 | boolean | false |
| clearable | 是否显示清除按钮(hover 时出现) | boolean | false |
| disabled | 禁用状态 | boolean | - |
| readOnly | 只读状态 | boolean | - |
| placeholder | 输入框占位文本 | string | - |
| decrementIcon | 自定义递减按钮图标 | ReactNode | - |
| incrementIcon | 自定义递增按钮图标 | ReactNode | - |
| leading | 输入框前置插槽内容 | ReactNode | - |
| trailing | 输入框后置插槽内容(位于清除按钮和操作按钮之前) | ReactNode | - |
| controlProps | 透传给内部 input 控件的属性 | NumberInputControlProps | - |
| size | 尺寸,影响高度、内边距和字号 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' |
| className | 根容器 class | ClassValue | - |
| classNames | 各 slot 的自定义 class | NumberInputClassNames | - |
类型
NumberInputClassNames
NumberInput 各 slot 的自定义 class 配置。
| 字段 | 类型 | 说明 |
|---|---|---|
| root | ClassValue | 根容器 class。 |
| control | ClassValue | 输入框 class。 |
| increment | ClassValue | 递增按钮 class。 |
| decrement | ClassValue | 递减按钮 class。 |
| clearable | ClassValue | 清除按钮 class。 |
NumberInputControlProps
内部输入控件的属性。继承原生 input 属性(排除 value / defaultValue / min / max),并增加以下字段。
| 字段 | 类型 | 说明 |
|---|---|---|
| value | number | string | 当前值。 |
| defaultValue | number | string | 默认值。 |
| min | number | 最小值。 |
| max | number | 最大值。 |
| center | boolean | 是否居中显示输入值。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸。 |
| className | ClassValue | 输入框 class。 |