# useCounter > Numeric counter with increment, decrement and reset. - Category: State - Package: `hookli` (install with `npm i hookli`) - Docs: https://hookli.vercel.app/docs/use-counter ## Signature ```ts useCounter(initialValue?: number): { count: number; increment: () => void; decrement: () => void; reset: () => void; setCount: Dispatch> } ``` ## Parameters - `initialValue`: `number` (default: `0`) — The count the hook starts from; reset returns here. ## Returns - `count`: `number` — The current count. - `increment`: `() => void` — Adds one to the count. - `decrement`: `() => void` — Subtracts one from the count. - `reset`: `() => void` — Restores the count to initialValue. - `setCount`: `Dispatch>` — Sets the count directly; accepts a value or an updater function. ## Usage ```tsx import { useCounter } from "hookli"; export function Demo() { const { count, increment, decrement, reset, setCount } = useCounter(0); return (

{count}

); } ``` ## Source `src/hooks/use-counter/use-counter.ts` ```ts import { Dispatch, SetStateAction, useCallback, useState } from "react"; export interface UseCounterReturn { count: number; increment: () => void; decrement: () => void; reset: () => void; setCount: Dispatch>; } export const useCounter = (initialValue = 0): UseCounterReturn => { const [count, setCount] = useState(initialValue); const increment = useCallback(() => setCount((prev) => prev + 1), []); const decrement = useCallback(() => setCount((prev) => prev - 1), []); const reset = useCallback(() => setCount(initialValue), [initialValue]); return { count, increment, decrement, reset, setCount }; }; ```