Get Started
Welcome to the documentation!
Getting Started
Welcome to shadcn-ahooks! This documentation will help you get started with using the library effectively.
This Registry provides a collection of React hooks from the popular ahooks library, packaged for easy integration with shadcn UI projects.
Installation
Open inpnpm dlx shadcn@latest add https://shadcn-ahooks.vercel.app/shadcn-ahooks.jsonnpx shadcn@latest add https://shadcn-ahooks.vercel.app/shadcn-ahooks.jsonyarn shadcn@latest add https://shadcn-ahooks.vercel.app/shadcn-ahooks.jsonbun shadcn@latest add https://shadcn-ahooks.vercel.app/shadcn-ahooks.jsonOverview
The src/hooks directory contains custom React hooks organized into two main categories:
- ahooks: A comprehensive collection of React hooks (inspired by the ahooks library)
- external-hooks: Additional custom hooks
Directory Structure
src/hooks/
├── ahooks/
│ ├── createDeepCompareEffect/
│ │ └── index.ts
│ ├── createUpdateEffect/
│ │ └── index.ts
│ ├── createUseStorageState/
│ │ └── index.ts
│ ├── useAntdTable/
│ │ ├── index.tsx
│ │ └── types.ts
│ ├── useAsyncEffect/
│ │ └── index.ts
│ ├── useBoolean/
│ │ └── index.ts
│ ├── useClickAway/
│ │ └── index.ts
│ ├── useControllableValue/
│ │ └── index.ts
│ ├── useCookieState/
│ │ └── index.ts
│ ├── useCountDown/
│ │ └── index.ts
│ ├── useCounter/
│ │ └── index.ts
│ ├── useCreation/
│ │ └── index.ts
│ ├── useDebounce/
│ │ ├── debounceOptions.ts
│ │ └── index.ts
│ ├── useDebounceEffect/
│ │ └── index.ts
│ ├── useDebounceFn/
│ │ └── index.ts
│ ├── useDeepCompareEffect/
│ │ └── index.tsx
│ ├── useDeepCompareLayoutEffect/
│ │ └── index.tsx
│ ├── useDocumentVisibility/
│ │ └── index.ts
│ ├── useDrag/
│ │ └── index.ts
│ ├── useDrop/
│ │ └── index.ts
│ ├── useDynamicList/
│ │ └── index.ts
│ ├── useEventEmitter/
│ │ └── index.ts
│ ├── useEventListener/
│ │ └── index.ts
│ ├── useEventTarget/
│ │ └── index.ts
│ ├── useExternal/
│ │ └── index.ts
│ ├── useFavicon/
│ │ └── index.ts
│ ├── useFocusWithin/
│ │ └── index.tsx
│ ├── useFullscreen/
│ │ └── index.ts
│ ├── useFusionTable/
│ │ ├── fusionAdapter.ts
│ │ ├── index.tsx
│ │ └── types.ts
│ ├── useGetState/
│ │ └── index.ts
│ ├── useHistoryTravel/
│ │ └── index.ts
│ ├── useHover/
│ │ └── index.ts
│ ├── useInfiniteScroll/
│ │ ├── index.tsx
│ │ └── types.ts
│ ├── useInterval/
│ │ └── index.ts
│ ├── useInViewport/
│ │ └── index.ts
│ ├── useIsomorphicLayoutEffect/
│ │ └── index.ts
│ ├── useKeyPress/
│ │ └── index.ts
│ ├── useLatest/
│ │ └── index.ts
│ ├── useLocalStorageState/
│ │ └── index.ts
│ ├── useLockFn/
│ │ └── index.ts
│ ├── useLongPress/
│ │ └── index.ts
│ ├── useMap/
│ │ └── index.ts
│ ├── useMemoizedFn/
│ │ └── index.ts
│ ├── useMount/
│ │ └── index.ts
│ ├── useMouse/
│ │ └── index.ts
│ ├── useMutationObserver/
│ │ └── index.ts
│ ├── useNetwork/
│ │ └── index.ts
│ ├── usePagination/
│ │ └── index.ts
│ ├── usePrevious/
│ │ └── index.ts
│ ├── useRafInterval/
│ │ └── index.ts
│ ├── useRafState/
│ │ └── index.ts
│ ├── useRafTimeout/
│ │ └── index.ts
│ ├── useReactive/
│ │ └── index.ts
│ ├── useRequest/
│ │ └── index.ts
│ ├── useResetState/
│ │ └── index.ts
│ ├── useResponsive/
│ │ └── index.ts
│ ├── useSafeState/
│ │ └── index.ts
│ ├── useScroll/
│ │ └── index.ts
│ ├── useSelections/
│ │ └── index.ts
│ ├── useSessionStorageState/
│ │ └── index.ts
│ ├── useSet/
│ │ └── index.ts
│ ├── useSetState/
│ │ └── index.ts
│ ├── useSize/
│ │ └── index.ts
│ ├── useTextSelection/
│ │ └── index.ts
│ ├── useTheme/
│ │ └── index.ts
│ ├── useThrottle/
│ │ └── index.ts
│ ├── useThrottleEffect/
│ │ └── index.ts
│ ├── useThrottleFn/
│ │ └── index.ts
│ ├── useTimeout/
│ │ └── index.ts
│ ├── useTitle/
│ │ └── index.ts
│ ├── useToggle/
│ │ └── index.ts
│ ├── useTrackedEffect/
│ │ └── index.ts
│ ├── useUnmount/
│ │ └── index.ts
│ ├── useUnmountedRef/
│ │ └── index.ts
│ ├── useUpdate/
│ │ └── index.ts
│ ├── useUpdateEffect/
│ │ └── index.ts
│ ├── useUpdateLayoutEffect/
│ │ └── index.ts
│ ├── useUrlState/
│ │ └── index.ts
│ ├── useVirtualList/
│ │ └── index.ts
│ ├── useWebSocket/
│ │ └── index.ts
│ ├── useWhyDidYouUpdate/
│ │ └── index.ts
│ └── utils/
│ └── (utility files)
│
└── external-hooks/
├── useCallbackEvent/
│ └── index.ts
├── useScrollLocker/
│ └── index.ts
└── utils/
└── (utility files)Hook Categories
State Management Hooks
useBoolean- Manage boolean stateuseCounter- Counter with increment/decrementuseGetState- Get latest state valueuseMap- Manage Map data structureuseReactive- Create reactive stateuseResetState- State with reset functionalityuseSafeState- State that prevents memory leaksuseSet- Manage Set data structureuseSetState- Object state managementuseToggle- Toggle between values
Storage Hooks
useCookieState- Manage cookie stateuseLocalStorageState- LocalStorage stateuseSessionStorageState- SessionStorage statecreateUseStorageState- Create storage hook factory
Effect Hooks
useAsyncEffect- Async effect hookuseDebounceEffect- Debounced effectuseDeepCompareEffect- Effect with deep comparisonuseDeepCompareLayoutEffect- Layout effect with deep comparisonuseThrottleEffect- Throttled effectuseTrackedEffect- Track effect dependenciesuseUpdateEffect- Effect that skips first renderuseUpdateLayoutEffect- Layout effect that skips first rendercreateDeepCompareEffect- Create deep compare effectcreateUpdateEffect- Create update effect factory
Performance Hooks
useDebounce- Debounce valueuseDebounceFn- Debounce functionuseThrottle- Throttle valueuseThrottleFn- Throttle functionuseMemoizedFn- Memoize functionuseCreation- Memoization like useMemouseLatest- Get latest value without re-renderusePrevious- Get previous value
DOM & Event Hooks
useClickAway- Detect clicks outside elementuseEventListener- Add event listeneruseEventTarget- Manage form inputsuseFocusWithin- Detect focus within elementuseHover- Detect hover stateuseKeyPress- Handle keyboard eventsuseLongPress- Detect long pressuseMouse- Track mouse positionuseScroll- Track scroll positionuseSize- Monitor element sizeuseTextSelection- Track text selection
Network & Request Hooks
useRequest- Data fetching and managementuseWebSocket- WebSocket connection
Lifecycle Hooks
useMount- Run on mountuseUnmount- Run on unmountuseUnmountedRef- Check if component is unmounteduseUpdate- Force component update
Timer Hooks
useCountDown- Countdown timeruseInterval- setInterval hookuseRafInterval- requestAnimationFrame intervaluseRafTimeout- requestAnimationFrame timeoutuseTimeout- setTimeout hook
Advanced Hooks
useAntdTable- Ant Design table integrationuseControllableValue- Controlled/uncontrolled componentsuseDrag- Drag functionalityuseDrop- Drop functionalityuseDynamicList- Manage dynamic listuseEventEmitter- Event emitter patternuseExternal- Load external resourcesuseFavicon- Manage faviconuseFullscreen- Fullscreen APIuseFusionTable- Fusion table integrationuseHistoryTravel- History state managementuseInfiniteScroll- Infinite scrolluseInViewport- Element in viewport detectionuseLockFn- Prevent concurrent function callsuseMutationObserver- MutationObserver APIuseNetwork- Network statususePagination- Pagination logicuseResponsive- Responsive breakpointsuseSelections- Selection managementuseTitle- Document titleuseUrlState- Sync state with URLuseVirtualList- Virtual list renderinguseWhyDidYouUpdate- Debug re-renders
Layout Hooks
useDocumentVisibility- Document visibility stateuseIsomorphicLayoutEffect- Cross-platform useLayoutEffectuseRafState- State with requestAnimationFrame
External Hooks
useCallbackEvent- Custom callback event handlinguseScrollLocker- Lock/unlock scroll
Usage
Import hooks directly from their directories:
import { useBoolean } from '@/hooks/ahooks/useBoolean';
import { useCallbackEvent } from '@/hooks/external-hooks/useCallbackEvent';Notes
- Most hooks follow the pattern of one hook per directory
- Each hook has its main implementation in
index.tsorindex.tsx - Some hooks have additional type definitions in
types.tsfiles - Utility functions are stored in
utils/directories