---
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)}
/>
)
```