InputNumber
Enter a number within certain range with the mouse or keyboard.
When To Use#
When a numeric value needs to be provided.
Examples
import { InputNumber } from 'antd';
function onChange(value) {
console.log('changed', value);
}
ReactDOM.render(<InputNumber min={1} max={10} defaultValue={3} onChange={onChange} />, mountNode);
+
$
+
$
cascader
import { InputNumber, Select, Space, Cascader } from 'antd';
import { SettingOutlined } from '@ant-design/icons';
const { Option } = Select;
const selectBefore = (
<Select defaultValue="add" style={{ width: 60 }}>
<Option value="add">+</Option>
<Option value="minus">-</Option>
</Select>
);
const selectAfter = (
<Select defaultValue="USD" style={{ width: 60 }}>
<Option value="USD">$</Option>
<Option value="EUR">€</Option>
<Option value="GBP">£</Option>
<Option value="CNY">¥</Option>
</Select>
);
ReactDOM.render(
<Space direction="vertical">
<InputNumber addonBefore="+" addonAfter="$" defaultValue={100} />
<InputNumber addonBefore={selectBefore} addonAfter={selectAfter} defaultValue={100} />
<InputNumber addonAfter={<SettingOutlined />} defaultValue={100} />
<InputNumber
addonBefore={<Cascader placeholder="cascader" style={{ width: 150 }} />}
defaultValue={100}
/>
</Space>,
mountNode,
);
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,
);
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} />
<Checkbox
onChange={() => {
setKeyboard(!keyboard);
}}
checked={keyboard}
>
Toggle keyboard
</Checkbox>
</Space>
);
};
ReactDOM.render(<App />, mountNode);
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} />
<Button
type="primary"
onClick={() => {
setValue(99);
}}
>
Reset
</Button>
</Space>
);
};
ReactDOM.render(<Demo />, mountNode);
import { InputNumber, Space } from 'antd';
function onChange(value) {
console.log('changed', value);
}
ReactDOM.render(
<Space>
<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} />
</Space>,
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);
import { InputNumber, Space } from 'antd';
function onChange(value) {
console.log('changed', value);
}
ReactDOM.render(
<Space>
<InputNumber
defaultValue={1000}
formatter={value => `$ ${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')}
parser={value => value.replace(/\$\s?|(,*)/g, '')}
onChange={onChange}
/>
<InputNumber
defaultValue={100}
min={0}
max={100}
formatter={value => `${value}%`}
parser={value => value.replace('%', '')}
onChange={onChange}
/>
</Space>,
mountNode,
);
import { InputNumber } from 'antd';
ReactDOM.render(<InputNumber min={1} max={10} defaultValue={3} bordered={false} />, mountNode);
¥
¥
¥
import { InputNumber } from 'antd';
import { InfoCircleOutlined, SmileOutlined, UserOutlined } from '@ant-design/icons';
ReactDOM.render(
<>
<InputNumber prefix="¥" style={{ width: '100%' }} />
<br />
<br />
<InputNumber addonBefore={<UserOutlined />} prefix="¥" style={{ width: '100%' }} />
<br />
<br />
<InputNumber prefix="¥" disabled style={{ width: '100%' }} />
</>,
mountNode,
);
API#
Property | Description | Type | Default | Version |
---|---|---|---|---|
addonAfter | The label text displayed after (on the right side of) the input field | ReactNode | - | |
addonBefore | The label text displayed before (on the left side of) the input field | ReactNode | - | |
autoFocus | If get focus when component mounted | boolean | false | - |
bordered | Whether has border style | boolean | true | 4.12.0 |
controls | Whether to show +- controls | boolean | true | 4.17.0 |
decimalSeparator | Decimal separator | string | - | - |
defaultValue | The initial value | number | - | - |
disabled | If disable the input | boolean | false | - |
formatter | Specifies the format of the value presented | function(value: number | string, info: { userTyping: boolean, input: string }): string | - | info: 4.17.0 |
keyboard | If enable keyboard behavior | boolean | true | 4.12.0 |
max | The max value | number | Number.MAX_SAFE_INTEGER | - |
min | The min value | number | Number.MIN_SAFE_INTEGER | - |
parser | Specifies the value extracted from formatter | function(string): number | - | - |
precision | The precision of input value. Will use formatter when config of formatter | number | - | - |
readOnly | If readonly the input | boolean | false | - |
prefix | The prefix icon for the Input | ReactNode | - | 4.17.0 |
size | The height of input box | large | middle | small | - | - |
step | The number to which the current value is increased or decreased. It can be an integer or decimal | number | string | 1 | - |
stringMode | Set value as string to support high precision decimals. Will return string value by onChange | boolean | false | 4.13.0 |
value | The current value | number | - | - |
onChange | The callback triggered when the value is changed | function(value: number | string | null) | - | - |
onPressEnter | The callback function that is triggered when Enter key is pressed | function(e) | - | - |
onStep | The callback function that is triggered when click up or down buttons | (value: number, info: { offset: number, type: 'up' | 'down' }) => void | - | 4.7.0 |
Methods#
Name | Description |
---|---|
blur() | Remove focus |
focus() | Get focus |
Notes#
Per issues #21158, #17344, #9421, and documentation about inputs, it appears this community does not support native inclusion of the type="number"
in the <Input />
attributes, so please feel free to include it as needed, and be aware that it is heavily suggested that server side validation be utilized, as client side validation can be edited by power users.
FAQ#
Why value
can exceed min
or max
in control?#
Developer handle data by their own in control. It will make data out of sync if InputNumber change display value. It also cause potential data issues when use in form.
Why dynamic change min
or max
which makes value
out of range will not trigger onChange
?#
onChange
is user trigger event. Auto trigger will makes form lib can not detect data modify source.