InputNumber数字输入框
通过鼠标或键盘,输入范围内的数值。
何时使用
当需要获取标准数值时。
代码演示

数字输入框。
import { InputNumber } from 'antd';function onChange(value) {console.log('changed', value);}ReactDOM.render(<InputNumber min={1} max={10} defaultValue={3} onChange={onChange} />, mountNode);

点击按钮切换可用状态。
import { InputNumber, Button } from 'antd';class App extends React.Component {state = {disabled: true,};toggle = () => {this.setState({disabled: !this.state.disabled,});};render() {return (<><InputNumber min={1} max={10} disabled={this.state.disabled} defaultValue={3} /><div style={{ marginTop: 20 }}><Button onClick={this.toggle} type="primary">Toggle disabled</Button></div></>);}}ReactDOM.render(<App />, mountNode);

通过 formatter 格式化数字,以展示具有具体含义的数据,往往需要配合 parser 一起使用。
这里有一个更复杂的货币格式化输入框:https://codesandbox.io/s/currency-wrapper-antd-input-3ynzo
import { InputNumber } from 'antd';function onChange(value) {console.log('changed', value);}ReactDOM.render(<><InputNumberdefaultValue={1000}formatter={value => `$ ${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')}parser={value => value.replace(/\$\s?|(,*)/g, '')}onChange={onChange}/><InputNumberdefaultValue={100}min={0}max={100}formatter={value => `${value}%`}parser={value => value.replace('%', '')}onChange={onChange}/></>,mountNode,);

没有边框。
import { InputNumber } from 'antd';ReactDOM.render(<InputNumber min={1} max={10} defaultValue={3} bordered={false} />, mountNode);

三种大小的数字输入框,当 size 分别为 large 和 small 时,输入框高度为 40px 和 24px ,默认高度为 32px。
import { InputNumber } from 'antd';function onChange(value) {console.log('changed', value);}ReactDOM.render(<div className="site-input-number-wrapper"><InputNumber size="large" min={1} max={100000} defaultValue={3} onChange={onChange} /><InputNumber min={1} max={100000} defaultValue={3} onChange={onChange} /><InputNumber size="small" min={1} max={100000} defaultValue={3} onChange={onChange} /></div>,mountNode,);
.code-box-demo .ant-input-number {margin-right: 10px;}.ant-row-rtl .code-box-demo .ant-input-number {margin-right: 0;margin-left: 10px;}

通过 stringMode 开启高精度小数支持,onChange 事件将返回 string 类型。对于旧版浏览器,你需要 BigInt polyfill。
TypeScript
JavaScript

import { InputNumber } from 'antd';function onChange(value: string) {console.log('changed', value);}ReactDOM.render(<InputNumber<string>style={{ width: 200 }}defaultValue="1"min="0"max="10"step="0.00000000000001"onChange={onChange}stringMode/>,mountNode,);

使用 keyboard 属性可以控制键盘行为。
TypeScript
JavaScript

import { InputNumber, Checkbox, Space } from 'antd';const App = () => {const [keyboard, setKeyboard] = React.useState(true);return (<Space><InputNumber min={1} max={10} keyboard={keyboard} defaultValue={3} /><CheckboxonChange={() => {setKeyboard(!keyboard);}}checked={keyboard}>Toggle keyboard</Checkbox></Space>);};ReactDOM.render(<App />, mountNode);

当通过受控将 value 超出边界时,提供警告样式。
TypeScript
JavaScript

import { InputNumber, Button, Space } from 'antd';const Demo = () => {const [value, setValue] = React.useState<string | number>('99');return (<Space><InputNumber min={1} max={10} value={value} onChange={setValue} /><Buttontype="primary"onClick={() => {setValue(99);}}>Reset</Button></Space>);};ReactDOM.render(<Demo />, mountNode);
API
属性如下
| 成员 | 说明 | 类型 | 默认值 | 版本 |
|---|---|---|---|---|
| autoFocus | 自动获取焦点 | boolean | false | - |
| bordered | 是否有边框 | boolean | true | 4.12.0 |
| decimalSeparator | 小数点 | string | - | - |
| defaultValue | 初始值 | number | - | - |
| disabled | 禁用 | boolean | false | - |
| formatter | 指定输入框展示值的格式 | function(value: number | string): string | - | - |
| keyboard | 是否启用键盘快捷行为 | boolean | true | 4.12.0 |
| max | 最大值 | number | Number.MAX_SAFE_INTEGER | - |
| min | 最小值 | number | Number.MIN_SAFE_INTEGER | - |
| parser | 指定从 formatter 里转换回数字的方式,和 formatter 搭配使用 | function(string): number | - | - |
| precision | 数值精度,配置 formatter 时会以 formatter 为准 | number | - | - |
| readOnly | 只读 | boolean | false | - |
| size | 输入框大小 | large | middle | small | - | - |
| step | 每次改变步数,可以为小数 | number | string | 1 | - |
| stringMode | 字符值模式,开启后支持高精度小数。同时 onChange 将返回 string 类型 | boolean | false | 4.13.0 |
| value | 当前值 | number | - | - |
| onChange | 变化回调 | function(value: number | string | null) | - | - |
| onPressEnter | 按下回车的回调 | function(e) | - | - |
| onStep | 点击上下箭头的回调 | (value: number, info: { offset: number, type: ‘up’ | ‘down’ }) => void | - | 4.7.0 |
方法
| 名称 | 描述 |
|---|---|
| blur() | 移除焦点 |
| focus() | 获取焦点 |
FAQ
为何受控模式下,value 可以超出 min 和 max 范围?
在受控模式下,开发者可能自行存储相关数据。如果组件将数据约束回范围内,会导致展示数据与实际存储数据不一致的情况。这使得一些如表单场景存在潜在的数据问题。
为何动态修改 min 和 max 让 value 超出范围不会触发 onChange 事件?
onChange 事件为用户触发事件,自行触发会导致表单库误以为变更来自用户操作。我们以错误样式展示超出范围的数值。
当前内容版权归 Ant Design 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 Ant Design .