Skip to content

Repository files navigation

@js-toolkit/react-hooks

npm packagelicense

Collection of reusable React hooks for state management, gestures, animation, responsive design, and common UI patterns.

Install

yarn add @js-toolkit/react-hooks
# or
npm install @js-toolkit/react-hooks

Import

import{useToggle}from'@js-toolkit/react-hooks/useToggle';import{useDebounceCallback}from'@js-toolkit/react-hooks/useDebounceCallback';

Hooks

State

HookDescription
useToggleBoolean toggle state
useRefStateState stored in ref (no re-render) with getter/setter
useExtendedStateState with additional methods
useInputStateState for controlled inputs
useIncrementalStateCounter state
useHideableStateState with show/hide/disable
useUpdateStateState with update handler for events
useUpdatedStateState that syncs with deps
useRafStateState updates via requestAnimationFrame
useQueueQueue data structure hook

Lifecycle

HookDescription
useFirstMountReturns true on first mount
useIsFirstMountFunction returning mount status
useIsMountedFunction returning current mount status
useUpdateEffectuseEffect that skips first mount
useAsyncEffectAsync effect on next tick
useMemoDestructorMemoized value with cleanup

Callbacks and Refs

HookDescription
useRefCallbackStable callback reference
useDebounceCallbackDebounced callback
useThrottleCallbackThrottled callback
useUpdatedRefRef that updates every render
useRefsCombine multiple refs
useChainRefCallbackChain multiple callbacks
useRafCallbackRAF-wrapped callback
useUpdateForce re-render

Gestures

HookDescription
useLongPressLong press detection
useDoubleClickDouble click detection
useDoubleTapDouble tap detection
usePinchZoomPinch zoom gesture
useHoverCallbacksHover with touch device prevention

UI and Layout

HookDescription
useFullscreenFullscreen API management
useScreenSizeTrack screen size changes
useMediaQueryMedia query hook for responsive breakpoints
useLockBodyScrollLock body scroll
useObjectURLCreate and manage object URLs

Animation

HookDescription
useAutoToggleAuto-toggle with debounced deactivation
useToggleDebounceToggle with debounced off
useSlideAnimationDirectionSlide animation direction
useMenuSlideAnimationMenu slide transitions

Async

HookDescription
useAsyncManage async operations (pending/error/value)
usePendingTasksTrack pending tasks by key

Usage Examples

useToggle

import{useToggle}from'@js-toolkit/react-hooks/useToggle';functionDialog(): React.JSX.Element{const[isOpen,toggle]=useToggle(false);return(<><buttontype="button"onClick={()=>toggle()}>Toggle</button>{isOpen&&<div>Dialogcontent</div>}</>);}

useDebounceCallback

import{useDebounceCallback}from'@js-toolkit/react-hooks/useDebounceCallback';functionSearch(): React.JSX.Element{consthandleSearch=useDebounceCallback((query: string)=>{voidfetch(`/api/search?q=${encodeURIComponent(query)}`);},300);return<inputonChange={(e)=>handleSearch(e.target.value)}/>;}

useMediaQuery

import{useMediaQuery}from'@js-toolkit/react-hooks/useMediaQuery';functionLayout(): React.JSX.Element{constisMobile=useMediaQuery('(max-width: 768px)');return<div>{isMobile ? 'Mobile' : 'Desktop'}</div>;}

useAsync

import{useAsync}from'@js-toolkit/react-hooks/useAsync';interfaceUser{id: string;name: string;}functionProfile({ userId }: {userId: string}): React.JSX.Element{const{ value, error, pending }=useAsync(async()=>{constres=awaitfetch(`/api/users/${userId}`);return(awaitres.json())asUser;},[userId]);if(pending)return<div>Loading...</div>;if(error)return<div>Error</div>;return<div>{value?.name}</div>;}

Repository

https://github.com/js-toolkit/react-hooks

About

React Hooks

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages