<NumberInput>

<NumberInput> translates to an HTML <input type="number">, and converts the user input to a number.

NumberInput

Usage

import { NumberInput } from 'react-admin';

<NumberInput source="nb_views" />

<NumberInput> converts the input value to a number (integer or float) on blur. This is because if the input updates the form value on every keystroke, it will prevent users from entering certain float values. For instance, to enter the number 1.02, a user would type 1.0, that JavaScript converts to the number 1.

If you need the form value to update on change instead of on blur (for instance to update another input based on the number input value), you can build your own number input using <TextInput>, and the format and parse props. But be aware that this only works for integer values.

Props

Prop Required Type Default Description
max Optional number ’’ The maximum value to accept for this input
min Optional number ’’ The minimum value to accept for this input
step Optional number any A stepping interval to use when using up and down arrows to adjust the value, as well as for validation

<NumberInput> also accepts the common input props.

step

You can customize the step props (which defaults to “any”). For instance, to restrict the value to integers, ise a value of 1 for the step:

<NumberInput source="nb_views" step={1} />

Usage In Filter Form

The Filter Button/Form combo changes the filter value as the user types. But, as explained earlier in this page, <NumberInput> converts the input value to a number on blur.

This means that using <NumberInput> in a filter form will not work as expected. The filter will only change when the user presses the Enter key, which differs from the other input types.

In a filter form, you should use a <TextInput type="number"> instead:

import { TextInput } from 'react-admin';

const convertStringToNumber = value => {
    const float = parseFloat(value);
    return isNaN(float) ? null : float;
};

const productFilters = [
    <TextInput label="Stock less than" source="stock_lte" type="number" parse={convertStringToNumber} />,
];

export const ProductList = () => (
    <List filters={productFilters}>
        ...
    </List>
);