JGuang

数字输入框

InputNumber · Ant Design

交互预览
npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

数字输入框

通过鼠标或键盘,输入范围内的数值。

何时使用

当需要获取标准数值时。

代码演示

  • 基本 · basic

  • 三种大小 · size

  • 不可用 · disabled

  • 高精度小数 · digit

  • 格式化展示 · formatter

  • 键盘行为 · keyboard

  • 鼠标滚轮 · change-on-wheel

  • 形态变体 · variant

  • 拨轮 · spinner

  • 超出边界 · out-of-range

  • 前缀/后缀 · presuffix

  • 自定义状态 · status

  • 聚焦 · focus

  • 自定义语义结构的样式和类 · style-class

API

通用属性参考:通用属性

参数说明类型默认值版本全局配置
addonAfter带标签的 input,设置后置标签,请使用 Space.Compact 替换ReactNode-4.17.0×
addonBefore带标签的 input,设置前置标签,请使用 Space.Compact 替换ReactNode-4.17.0×
changeOnBlur是否在失去焦点时,触发 onChange 事件(例如值超出范围时,重新限制回范围并触发事件)booleantrue5.11.0×
changeOnWheel允许鼠标滚轮改变数值boolean-5.14.0×
classNames用于自定义组件内部各语义化结构的 class,支持对象或函数Record<SemanticDOM, string> | (info: { props })=> Record<SemanticDOM, string>-6.0.06.0.0
controls是否显示增减按钮,也可设置自定义箭头图标boolean | { upIcon?: React.ReactNode; downIcon?: React.ReactNode; }-×
decimalSeparator小数点string--×
placeholder占位符string-×
defaultValue初始值number--×
disabled禁用booleanfalse-×
formatter指定输入框展示值的格式function(value: number | string, info: { userTyping: boolean, input: string }): string-×
keyboard是否启用键盘快捷行为booleantrue×
max最大值numberNumber.MAX_SAFE_INTEGER-×
min最小值numberNumber.MIN_SAFE_INTEGER-×
parser指定从 formatter 里转换回数字的方式,和 formatter 搭配使用function(string): number--×
precision数值精度,配置 formatter 时会以 formatter 为准number--×
readOnly只读booleanfalse-×
status设置校验状态'error' | 'warning'-×
styles用于自定义组件内部各语义化结构的行内 style,支持对象或函数Record<SemanticDOM, CSSProperties> | (info: { props })=> Record<SemanticDOM, CSSProperties>-6.0.06.0.0
prefix带有前缀图标的 inputReactNode-×
suffix带有后缀图标的 inputReactNode-5.20.0×
size输入框大小large | medium | small--×
step每次改变步数,可以为小数number | string1-×
stringMode字符值模式,开启后支持高精度小数。同时 onChange 将返回 string 类型booleanfalse4.13.0×
mode展示输入框或拨轮'input' | 'spinner''input'×
value当前值number--×
variant形态变体outlined | borderless | filled | underlinedoutlined5.13.0 | underlined: 5.24.05.19.0
onChange变化回调function(value: number | string | null)--×
onPressEnter按下回车的回调function(e)--×
onStep点击上下箭头、键盘、滚轮的回调(value: number, info: { offset: number, type: 'up' | 'down', emitter: 'handler' | 'keydown' | 'wheel' }) => void--×
bordered是否带边框,请使用 variant 替代booleantrue-×

Ref

名称说明参数版本
blur()移除焦点-
focus()获取焦点(option?: { preventScroll?: boolean, cursor?: 'start' | 'end' | 'all' })cursor - 5.22.0
nativeElement获取原生 DOM 元素-5.17.3

Semantic DOM

语义节点原生说明版本
root根元素,设置行内块布局、宽度、边框圆角和重置样式—
prefix前缀的包裹元素,设置flex布局、对齐方式和右边距样式—
input输入框元素,设置字体、行高、文本输入和交互样式—
suffix后缀的包裹元素,设置flex布局、边距和过渡动画样式—
actions操作元素,设置绝对定位、宽度、flex布局和数值调节按钮样式—
action单个操作按钮元素,设置按钮的样式、悬浮效果和点击交互—

语义说明来源: vendor/components/input-number/demo/_semantic.tsx

主题变量(Design Token)

类型、继承关系和原生令牌声明保持固定源码原文;默认值由原生主题计算,并可能受 ConfigProvider 覆盖。本表不伪造静态默认值。

令牌类型原生说明
controlWidthnumber输入框宽度
handleWidthnumber操作按钮宽度
handleFontSizenumber操作按钮图标大小
handleVisible'auto' | true操作按钮可见性
handleBgstring操作按钮背景色
handleActiveBgstring操作按钮激活背景色
handleHoverColorstring操作按钮悬浮颜色
handleBorderColorstring操作按钮边框颜色
filledHandleBgstring面性变体操作按钮背景色
handleOpacitynumber见原生声明及继承类型
handleVisibleWidthnumber见原生声明及继承类型

声明来源: vendor/components/input-number/style/token.ts

import { FastColor } from '@ant-design/fast-color';

import type { SharedComponentToken, SharedInputToken } from '../../input/style/token';

import { initComponentToken } from '../../input/style/token';

import type { FullToken, GetDefaultToken } from '../../theme/internal';

export interface ComponentToken extends SharedComponentToken {
  /**
   * @desc 输入框宽度
   * @descEN Width of input
   */
  controlWidth: number;
  /**
   * @desc 操作按钮宽度
   * @descEN Width of control button
   */
  handleWidth: number;
  /**
   * @desc 操作按钮图标大小
   * @descEN Icon size of control button
   */
  handleFontSize: number;
  /**
   * Default `auto`. Set `true` will always show the handle
   * @desc 操作按钮可见性
   * @descEN Handle visible
   */
  handleVisible: 'auto' | true;
  /**
   * @desc 操作按钮背景色
   * @descEN Background color of handle
   */
  handleBg: string;
  /**
   * @desc 操作按钮激活背景色
   * @descEN Active background color of handle
   */
  handleActiveBg: string;
  /**
   * @desc 操作按钮悬浮颜色
   * @descEN Hover color of handle
   */
  handleHoverColor: string;
  /**
   * @desc 操作按钮边框颜色
   * @descEN Border color of handle
   */
  handleBorderColor: string;
  /**
   * @desc 面性变体操作按钮背景色
   * @descEN Background color of handle in filled variant
   */
  filledHandleBg: string;
  /**
   * @internal
   */
  handleOpacity: number;
  /**
   * @internal
   */
  handleVisibleWidth: number;
}

export type InputNumberToken = FullToken<'InputNumber'> & SharedInputToken;

注意事项

根据相关问题 #21158、#17344、#9421 以及 关于 number 输入框的文档,社区似乎不支持在 <Input /> 属性中原生包含 type="number",因此请根据需要自行添加,并注意强烈建议使用服务端验证,因为客户端验证可能被高级用户修改。

FAQ

为何受控模式下,value 可以超出 min 和 max 范围?

在受控模式下,开发者可能自行存储相关数据。如果组件将数据约束回范围内,会导致展示数据与实际存储数据不一致的情况。这使得一些如表单场景存在潜在的数据问题。

为何动态修改 min 和 max 让 value 超出范围不会触发 onChange 事件?

onChange 事件为用户触发事件,自行触发会导致表单库误以为变更来自用户操作。我们以错误样式展示超出范围的数值。

为何 onBlur 等事件获取不到正确的 value?

InputNumber 的值由内部逻辑封装而成,通过 onBlur 等事件获取的 event.target.value 仅为 DOM 元素的 value 而非 InputNumber 的实际值。例如通过 formatter 或者 decimalSeparator 更改展示格式,DOM 中得到的就是格式化后的字符串。你总是应该通过 onChange 获取当前值。

为何 changeOnWheel 无法控制鼠标滚轮是否改变数值?

不建议使用 type 属性

InputNumber 组件允许你使用 input 元素的所有属性最终透传至 input 元素,当你传入 type="number" 时 input 元素也会添加这个属性,这会使 input 元素触发原生特性(允许鼠标滚轮改变数值),从而导致 changeOnWheel 无法控制鼠标滚轮是否改变数值。

原生通用属性

Tips: 以下通用属性适用于 antd 大部分组件,不支持的组件会单独说明。

参数说明类型默认值
style自定义样式CSSProperties-
className自定义类名string-
rootClassName添加在组件最外层的 classNamestring-
autoFocus自动获取焦点,仅对表单类、链接、交互容器等可聚焦元素生效booleanfalse

安装并复现示例

npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

使用 ConfigProvider 和原生 App,并单独配置 dayjs 语言。每个示例在查看代码中列出完整源码文件和额外固定依赖。示例名称用于选择演示,不是组件通用属性。主题、语言与 SSR 初始化见资源安装指南。

原生类型参考

源码查看器包含未修改的原生实现和以下声明文件,继承类型仍位于原生包中。代码中的英文注释保留为源码参考。

  • vendor/components/input-number/index.tsx
  • vendor/components/input-number/style/token.ts

来源与许可

https://github.com/ant-design/ant-design/tree/4a39f54842eade4e565ab336ef6097cd7e723cdd

保留原生中英文正文与可执行示例;官网专用的嵌入章节和令牌表格在本地展开。Ant Design 使用 MIT 许可,另列依赖的许可证也需保留。上传预览禁止向外发起请求,不提供后端服务。