--- title: useCounter description: "`useCounter` is a custom hook that returns the current counter value." links: - source: https://github.com/yamada-ui/yamada-ui/tree/main/packages/react/src/hooks/use-counter --- ```tsx const { value, increment, decrement, reset } = useCounter({ defaultValue: 10, }) return ( Count: {value} increment()} > + 1 decrement()} > - 1 Reset ) ``` ## Usage ```tsx import { useCounter } from "@yamada-ui/react" ``` ```tsx import { useCounter } from "@/components/ui" ``` ```tsx import { useCounter } from "@workspaces/ui" ``` ```tsx const { value, valueAsNumber, update, increment, decrement, reset, cast, out } = useCounter() ``` ### Set Default Value To set a default value, pass a number or string to `defaultValue`. ```tsx const { value, increment, decrement, reset } = useCounter({ defaultValue: 10, }) return ( Count: {value} increment()} > + 1 decrement()} > - 1 Reset ) ``` ### Set Min And Max Values To set minimum and maximum values, set `min` or `max` to a number. ```tsx const { value, increment, decrement, min, max, reset } = useCounter({ defaultValue: 5, min: 0, max: 10, }) return ( Count: {value} increment()} disabled={max} > + 1 decrement()} disabled={min} > - 1 Reset ) ``` ### Set Step Value To set a step value, pass a number to `step`. ```tsx const { value, increment, decrement, reset } = useCounter({ defaultValue: 0, step: 5, }) return ( Count: {value} increment()} > + 5 decrement()} > - 5 Reset ) ``` ```tsx const { value, increment, decrement } = useCounter({ defaultValue: 0, }) return ( Count: {value} {(step) => ( increment(step)}> + {step} )} {(step) => ( decrement(step)}> - {step} )} ) ``` ### Specify Precision To specify precision, pass a number to `precision`. ```tsx const { value, increment, decrement, reset } = useCounter({ defaultValue: 5.123, step: 0.1, precision: 2, }) return ( Count: {value} increment()} > + 0.1 decrement()} > - 0.1 Reset ) ``` ### Allow Out Of Range Values To allow out of range values, set `keepWithinRange` to `false`. The `out` property is also provided to indicate whether the value is out of range. ```tsx const { value, increment, decrement, out, reset } = useCounter({ defaultValue: 5, min: 0, max: 10, keepWithinRange: false, }) return ( Count: {value} {out ? "(Out Of Range)" : ""} increment()} > + 1 decrement()} > - 1 Reset ) ``` ### Cast Value To cast value, use the `cast` function. ```tsx const { value, setValue, cast } = useCounter({ defaultValue: 0, precision: 2, }) return ( setValue(e.target.value)} onBlur={(e) => cast(e.target.value)} /> ) ```