apps/mantine.dev/src/pages/hooks/use-set-state.mdx
import { Layout } from '@/layout'; import { MDX_DATA } from '@/mdx';
export default Layout(MDX_DATA.useSetState);
The use-set-state hook works similarly to how this.setState works in class components – it shallow merges the state partial
into the current state.
import { useSetState } from '@mantine/hooks';
const [state, setState] = useSetState({
name: 'John',
age: 35,
job: 'Engineer',
});
state; // -> { name: 'John', age: 35, job: 'Engineer' }
setState({ name: 'Jane' }); // -> { name: 'Jane', age: 35, job: 'Engineer' }
setState({ age: 25, job: 'Manager' }); // -> { name: 'Jane', age: 25, job: 'Manager' }
setState((current) => ({ age: current.age + 7 })); // -> { name: 'Jane', age: 32, job: 'Manager' }
Note that it can work only with objects; primitive values and arrays are not supported:
import { useSetState } from '@mantine/hooks';
useSetState([1, 2, 3]); // -> will not work
useSetState(1); // -> will not work
useSetState({ skills: ['JavaScript', 'TypeScript'] }); // -> works fine
type UseSetStateCallback<T> = (
state: Partial<T> | ((currentState: T) => Partial<T>)
) => void;
type UseSetStateReturnValue<T> = [T, UseSetStateCallback<T>];
function useSetState<T extends Record<string, any>>(initialState: T): UseSetStateReturnValue<T>
UseSetStateCallback and UseSetStateReturnValue types are exported from the @mantine/hooks package;
you can import them in your application:
import type { UseSetStateCallback, UseSetStateReturnValue } from '@mantine/hooks';