apps/mantine.dev/src/pages/hooks/use-input-state.mdx
import { Layout } from '@/layout'; import { MDX_DATA } from '@/mdx';
export default Layout(MDX_DATA.useInputState);
The use-input-state hook handles the state of native inputs (with event in onChange handler) and custom inputs (with value in onChange handler).
The hook works with all Mantine and native inputs:
import { useState } from 'react';
import { NumberInput, TextInput } from '@mantine/core';
import { useInputState } from '@mantine/hooks';
function WithUseInputState() {
const [stringValue, setStringValue] = useInputState('');
const [numberValue, setNumberValue] = useInputState<
string | number
>(0);
return (
<>
<input
type="text"
value={stringValue}
onChange={setStringValue}
/>
<TextInput value={stringValue} onChange={setStringValue} />
<NumberInput value={numberValue} onChange={setNumberValue} />
</>
);
}
function WithUseState() {
const [stringValue, setStringValue] = useState('');
const [numberValue, setNumberValue] = useState<string | number>(0);
return (
<>
<input
type="text"
value={stringValue}
onChange={(event) =>
setStringValue(event.currentTarget.value)
}
/>
<TextInput
value={stringValue}
onChange={(event) =>
setStringValue(event.currentTarget.value)
}
/>
<NumberInput value={numberValue} onChange={setNumberValue} />
</>
);
}
type UseInputStateReturnValue<T> = [
T,
(value: null | undefined | T | React.ChangeEvent<any>) => void,
];
function useInputState<T>(initialState: T): UseInputStateReturnValue<T>
UseInputStateReturnValue type is exported from @mantine/hooks package,
you can import it in your application:
import type { UseInputStateReturnValue } from '@mantine/hooks';