Beta Preview

NumberField

NumberFields allow users to input number values with a keyboard or increment/decrement with step buttons.

 
size 
labelPosition 
 
contextualHelp 
hideStepper 
isDisabled 
import {NumberField} from '@react-spectrum/s2';

<NumberField
  label="Width"
  defaultValue={1024}
  minValue={0} />

Value

Use the value or defaultValue prop to set the number value. The onChange event is called when the user finishes editing the value (e.g. on blur, incrementing, or decrementing).

Current value: 25

import {NumberField} from '@react-spectrum/s2';
import {useState} from 'react';

function Example() {
  let [value, setValue] = useState(25);
  return (
    <div>
      <NumberField
        label="Cookies to buy"
        value={value}
        onChange={setValue}
      />
      <p>Current value: {value}</p>
    </div>
  );
}

Format options

Use the formatOptions prop to control how the value is formatted (according to the user's locale). This is compatible with the Intl.NumberFormat API.

formatOptions 
0 – 5
Sign Display
<NumberField
  label="Value"
  defaultValue={5}
  formatOptions={{style: "decimal"}} />

Value scale

Use the minValue, maxValue, and step props to set the allowed values. Steps are calculated starting from the minimum. For example, if minValue={2}, and step={3}, the valid step values would be 2, 5, 8, 11, etc.

 
 
 
<NumberField
  label="Amount"
  minValue={0}
  maxValue={150}
  defaultValue={50}
  step={5} />

Numbering system

By default, NumberField displays the value using the numbering system for the user's locale. Use <Provider> to override the numbering system by setting the Unicode numbering system locale extension. The Latin, Arabic, Devanagari, Bengali, and Han positional decimal numbering systems are currently supported.

Locale
Numbering system
import {Provider, NumberField} from '@react-spectrum/s2';

<Provider locale="hi-IN-u-nu-deva">
  <NumberField label="Value" defaultValue={1024} />
</Provider>

Forms

Use the name prop to submit the raw number value (not a formatted string) to the server. Set the isRequired prop to validate that the user enters a value, or implement custom client or server-side validation. See the Forms guide to learn more.

isRequired 
necessityIndicator 
import {NumberField, Button, Form} from '@react-spectrum/s2';

function Example(props) {
  return (
    <Form>
      <NumberField
        {...props}
        label="Width"
        name="width"
        isRequired
      />
      <Button type="submit">Submit</Button>
    </Form>
  );
}

API

NameTypeDefault
hideStepperbooleanDefault: false
Whether to hide the increment and decrement buttons.
size'S''M''L''XL'Default: 'M'
The size of the NumberField.
decrementAriaLabelstringDefault:
A custom aria-label for the decrement button. If not provided, the localized string "Decrement" is used.
incrementAriaLabelstringDefault:
A custom aria-label for the increment button. If not provided, the localized string "Increment" is used.
isWheelDisabledbooleanDefault:
Enables or disables changing the value with scroll.
isDisabledbooleanDefault:
Whether the input is disabled.
isReadOnlybooleanDefault:
Whether the input can be selected but not changed by the user.
stylesDefault:
Spectrum-defined styles, returned by the style() macro.
valuenumberDefault:
The current value (controlled).
defaultValuenumberDefault:
The default value (uncontrolled).
onChange(value: T) => voidDefault:
Handler that is called when the value changes.
formatOptionsIntl.NumberFormatOptionsDefault:
Formatting options for the value displayed in the number field. This also affects what characters are allowed to be typed by the user.