
Security News
Suno Breached via Shai-Hulud Worm, Leaked Code Exposes AI Music Scraping
A Shai-Hulud infection exposed Suno's source code, which shows the AI music startup stream-ripped tracks to train its models.
@supunlakmal/hooks
Advanced tools
A comprehensive collection of production-ready, reusable React hooks written in TypeScript to simplify common UI patterns and browser API interactions.
Stop reinventing the wheel! @supunlakmal/hooks provides a wide arrays, easy-to-use hooks covering everything from state management enhancements and side effects to browser APIs and performance optimizations.
Why choose @supunlakmal/hooks?
useDebounce, useThrottle, and useVirtualList for optimization.npm install @supunlakmal/hooks
# or
yarn add @supunlakmal/hooks
import React, { useState } from 'react';
import { useToggle, useDebounce, useWindowSize } from '@supunlakmal/hooks';
function ExampleComponent() {
// Effortlessly manage boolean state
const [isOpen, toggle] = useToggle(false);
// Debounce rapid input changes
const [inputValue, setInputValue] = useState('');
const debouncedSearchTerm = useDebounce(inputValue, 500);
// Get window dimensions easily
const { width, height } = useWindowSize();
// Use debounced value for API calls, etc.
React.useEffect(() => {
if (debouncedSearchTerm) {
console.log(`Searching for: ${debouncedSearchTerm}`);
// Fetch API call here...
}
}, [debouncedSearchTerm]);
return (
<div>
{/* useToggle Example */}
<button onClick={toggle}>{isOpen ? 'Close' : 'Open'}</button>
{isOpen && <p>Content is visible!</p>}
<hr />
{/* useDebounce Example */}
<input
type="text"
placeholder="Search..."
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
/>
<p>Typing: {inputValue}</p>
<p>Debounced: {debouncedSearchTerm}</p>
<hr />
{/* useWindowSize Example */}
<p>
Window Size: {width}px x {height}px
</p>
</div>
);
}
Hooks are organized into thematic categories so you can quickly jump to the patterns you need. Every entry links to its detailed guide in docs/.
Enhanced useState-style primitives for toggles, lists, finite state machines, and other complex data structures.
| Hook | Description |
|---|---|
useBoolean | Manages a boolean state with explicit setTrue, setFalse, and toggle functions. |
useConst | Initializes and returns a constant value that persists across renders. |
useControlledRerenderState | A useState alternative where the state setter can cancel a re-render. |
useCounter | Manages a number state with increment, decrement, set, and reset actions. |
useCycle | Cycles through a predefined list of values. |
useDefault | Returns a default value if the provided value is null or undefined. |
useDerivedState | A semantic wrapper around useMemo for creating state based on other values. |
useEnum | Manages state that is constrained to the values of a given enum object. |
useFiniteStateMachine | Manages complex state using an explicit finite state machine definition. |
useFirstMountState | Returns true only on the first render of a component. |
useFunctionalState | A useState variant that returns a getter function for the state. |
useHistoryState | Manages state with a history, allowing for undo and redo operations. |
useIsFirstRender | Returns true only on the initial render of a component. |
useIsMounted | Returns a function that indicates if the component is currently mounted. |
useList | Manages an array state with a comprehensive set of list manipulation actions. |
useListState | Manages an array state with basic list manipulation functions. |
useMap | Manages a Map object as state with actions to manipulate it. |
useMapState | Manages a key-value object as state with set, remove, and reset functions. |
useMediatedState | A useState variant where every value set is passed through a mediator function. |
usePrevious | Returns the value of a prop or state from the previous render. |
usePreviousDifferent | Returns the last value that was different from the current value. |
useQueue | Manages a queue (First-In, First-Out) with methods to add, remove, and peek. |
useResetState | A useState variant that includes a function to reset the state to its initial value. |
useSet | Manages a Set object as state with actions to manipulate it. |
useSetState | Manages an object state, merging updates similarly to this.setState in class components. |
useStateWithHistory | Manages state with a history of changes, allowing for undo and redo operations. |
useStepper | Manages state for multi-step forms or wizards. |
useToggle | Manages a boolean state with a toggle function. |
Hooks that orchestrate effects, logging, and lifecycle nuances beyond vanilla useEffect.
| Hook | Description |
|---|---|
useConditionalEffect | A useEffect that only runs its callback if a set of conditions are met. |
useCustomCompareEffect | A useEffect that uses a custom comparator function for its dependency array. |
useDeepCompareEffect | A useEffect that performs a deep comparison of its dependencies. |
useDebouncedEffect | A useEffect whose callback function is debounced. |
useIsomorphicLayoutEffect | A hook that uses useLayoutEffect in the browser and useEffect on the server. |
useLifecycleLogger | Logs component lifecycle events (mount, update, unmount) to the console. |
useLogger | Logs component lifecycle events and prop changes. |
useMount | Runs a callback function once when the component mounts. |
useThrottledEffect | A useEffect whose callback function is throttled. |
useUnmount | Runs a callback function when the component unmounts. |
useUnmountEffect | Runs an effect only when the component is unmounted. |
useUpdateEffect | A useEffect that skips the initial render and only runs on updates. |
useWhyDidYouUpdate | A debugging tool that logs which props changed on a component re-render. |
useErrorBoundary | Imperative helpers for programmatically triggering and resetting React error boundaries. |
useReducerLogger | Wraps useReducer to log every action and resulting state, aiding debugging. |
Helpers for REST-style data loading, request cancellation, debouncing, and network-aware flows.
| Hook | Description |
|---|---|
useAsync | Manages the state of an asynchronous function call. |
useAsyncAbortable | An useAsync variant that provides an AbortSignal to the async function. |
useCachedFetch | A useFetch variant with in-memory caching to avoid redundant requests. |
useDebouncedFetch | A useFetch variant that debounces the request trigger. |
useDelete | A specialized useFetch for making DELETE requests. |
useFetch | A general-purpose hook for fetching data from an API. |
useGet | A specialized useFetch for making GET requests. |
useIdleFetch | Triggers a data fetch when the user becomes active after a period of inactivity. |
useLocationBasedFetch | Fetches data from an API based on the user's current geolocation. |
useMutation | Manages asynchronous operations that modify data (e.g., POST, PUT, DELETE). |
useNetworkAwareFetch | A useFetch variant that only runs when the user is online. |
usePatch | A specialized useFetch for making PATCH requests. |
usePost | A specialized useFetch for making POST requests. |
usePromise | Manages the state of a promise-based function. |
usePut | A specialized useFetch for making PUT requests. |
Wrappers around platform APIs such as Clipboard, Storage, Battery, Permissions, and Web Workers.
| Hook | Description |
|---|---|
useBatteryStatus | Tracks the device's battery status using the Battery Status API. |
useBroadcastChannel | Enables cross-tab/window communication using the Broadcast Channel API. |
useClipboard | Interacts with the system clipboard for copying and pasting. |
useClipboardWithFeedback | An extension of useClipboard that provides feedback when text is copied. |
useCookie | Manages a specific browser cookie. |
useCopyToClipboard | A hook specifically for copying text to the clipboard. |
useDeviceMotion | Tracks device motion information like acceleration and rotation rate. |
useDeviceOrientation | Tracks the physical orientation of the device. |
useDocumentTitle | Sets the document.title of the page. |
useEventSource | Connects to a Server-Sent Events (SSE) endpoint. |
useEyeDropper | Uses the experimental EyeDropper API to sample colors from the screen. |
useFavicon | Dynamically sets the website's favicon. |
useFullscreen | Manages the fullscreen state for a specific element. |
useGeolocation | Tracks the user's geolocation. |
useGeolocationContinuous | Provides a continuous stream of geolocation data. |
useIdleCallback | Schedules a function to be executed during browser idle periods. |
useIdleDetection | Detects user idle state and screen lock status using the Idle Detection API. |
useLocalStorage | Manages state with localStorage, automatically syncing between state and storage. |
useLocalStorageQueue | Manages a queue that is persisted in localStorage. |
useLocalStorageValue | Manages a single localStorage key. |
useMediaStream | Manages access to the user's media devices (camera, microphone). |
useNetworkAwareWebSocket | Manages a WebSocket connection that is only active when the user is online. |
useNetworkSpeed | Gets information about the user's network connection speed and type. |
useNetworkState | Tracks the state of the browser's network connection. |
useNotification | Manages web notifications. |
useOnlineStatus | Tracks the browser's online status. |
useOrientation | Tracks the device's screen orientation. |
usePageVisibility | Tracks the visibility state of the browser page/tab. |
usePermission | Queries the status of a browser permission using the Permissions API. |
usePersistentCounter | A counter that persists its state in localStorage. |
usePersistentToggle | A boolean state that persists in localStorage. |
usePreferredLanguages | Retrieves the user's preferred languages from the browser. |
usePrefersReducedMotion | Detects if the user prefers reduced motion. |
useQueryParam | Synchronizes a state variable with a URL query parameter. |
useScreenOrientation | Tracks the screen orientation state. |
useScript | Dynamically loads an external script and tracks its loading state. |
useSessionStorage | Manages state with sessionStorage, automatically syncing between state and storage. |
useSpeechSynthesis | Utilizes the browser's Speech Synthesis API (Text-to-Speech). |
useStorageValue | A generic hook for managing a single key in a Storage object. |
useSyncedLocalStorage | A useLocalStorage variant that syncs its state across multiple tabs/windows. |
useVibration | Interacts with the browser's Vibration API. |
useWakeLock | Manages a screen wake lock to prevent the device from sleeping. |
useWebSocket | Manages WebSocket connections. |
useWebWorker | Runs a function in a web worker to avoid blocking the main thread. |
useWorker | Another hook for running functions in a web worker. |
useDarkMode | Synchronizes the UI theme with system preferences and persists overrides in localStorage. |
useDebouncedGeolocation | Throttles high-frequency geolocation updates so downstream effects run at a manageable cadence. |
DOM-centric hooks for layout measurements, interactions, viewport tracking, and accessibility patterns.
| Hook | Description |
|---|---|
useBreakpoint | Determines the currently active responsive breakpoint. |
useClickOutside | Detects clicks outside of a specified element. |
useClickOutsideWithEscape | Triggers a callback on a click outside an element or on pressing the 'Escape' key. |
useContextMenu | Manages the state for a custom context menu. |
useDebouncedMediaQuery | A useMediaQuery variant that debounces the result. |
useDebouncedWindowSize | A useWindowSize variant that provides debounced dimensions. |
useDrag | Provides basic drag-and-drop event handling for an element. |
useDraggable | Makes a DOM element draggable. |
useElementSize | Observes an element's size and provides its width and height. |
useFocusTrap | Traps focus within a specified container element. |
useFocusWithinState | Tracks whether an element or any of its descendants has focus. |
useHasBeenVisible | Tracks if an element has ever become visible in the viewport. |
useHover | Detects whether a DOM element is being hovered over. |
useHoverDelay | Tracks if an element has been hovered for a minimum specified duration. |
useImageOnLoad | Tracks the loading status and dimensions of an image. |
useInfiniteScroll | Implements infinite scrolling. |
useIntersectionObserver | Tracks the visibility of an element within the viewport. |
useMeasure | Tracks element dimensions using ResizeObserver. |
useMediaQuery | Tracks the state of a CSS media query. |
useMergeRefs | Merges multiple refs into a single callback ref. |
useMobile | Returns whether the current viewport is mobile-sized. |
useMousePosition | Tracks the current position of the mouse pointer. |
usePageLeave | Triggers a callback when the user's mouse cursor leaves the viewport. |
usePagination | Manages pagination state and controls. |
usePinchZoom | Detects pinch-to-zoom gestures on a target element. |
usePortal | Manages a React Portal. |
useResizeObserver | Monitors changes to an element's size using ResizeObserver. |
useRovingTabIndex | Implements the roving tabindex accessibility pattern. |
useScrollLock | Locks and unlocks body scroll. |
useScrollPosition | Tracks the scroll position of the window or a specific element. |
useScrollSpy | Monitors scroll position to determine which element is currently active. |
useScrollToTop | Provides a function to scroll the window to the top. |
useSwipe | Detects swipe gestures on a target element. |
useTextSelection | Tracks the user's text selection within the document. |
useVirtualList | Optimizes the rendering of long lists by only rendering visible items. |
useVisibility | Tracks whether an element is visible in the viewport. |
useWindowSize | Tracks the browser window's dimensions. |
useHookableRef | Combines refs with callbacks so consumers can observe element mount/unmount events. |
useIsomorphicId | Creates a stable ID that works consistently in SSR and CSR environments. |
Utilities that simplify attaching listeners, key combos, long presses, and history changes.
| Hook | Description |
|---|---|
useEventListener | Attaches an event listener to a target element. |
useEventCallback | Creates a stable callback function that always calls the latest version of the provided callback. |
useKeyCombo | Detects specific keyboard combinations (shortcuts). |
useKeyPress | Detects when a specific key is pressed down. |
useLongPress | Detects long press events on an element. |
useRouteChange | Executes a callback when the browser's route changes. |
useThrottledEventListener | Attaches an event listener with a throttled callback. |
Debounce/throttle utilities, RAF helpers, and render diagnostics that keep components snappy.
| Hook | Description |
|---|---|
useDebounce | Debounces a value, delaying its update until a specified time has passed without change. |
useDebouncedCallback | Creates a debounced version of a callback function. |
useDebouncedState | A useState variant where the state updates are debounced. |
useForceUpdate | Provides a function to manually force a component to re-render. |
useRafCallback | Schedules a callback to be executed on the next animation frame. |
useRafState | A useState variant that updates state on the next animation frame. |
useRenderCount | Tracks the number of times a component has rendered. |
useRerender | Provides a function to manually trigger a re-render. |
useThrottle | Throttles a value, ensuring it updates at most once per specified interval. |
useThrottledCallback | Creates a throttled version of a callback function. |
useThrottledScroll | Tracks window scroll position with throttled updates. |
useThrottledState | A useState variant where state updates are throttled. |
useCustomCompareMemo | Memo variant that reruns its factory only when a custom comparator reports dependency changes. |
useSyncedRef | Keeps a mutable ref in sync with the latest value without re-rendering consumers. |
Form-centric hooks for managing inputs, validation, and lightweight i18n.
| Hook | Description |
|---|---|
useForm | Manages form state, input changes, and submission handling. |
useFormValidation | Manages form state with built-in validation and submission logic. |
useTranslation | A basic internationalization (i18n) hook for translating form labels and messages. |
Declarative abstractions over setTimeout and setInterval, including countdowns and idle timers.
| Hook | Description |
|---|---|
useCountdown | Manages a countdown timer with start, pause, and reset controls. |
useIdleTimer | Detects user inactivity. |
useInterval | Sets up an interval that repeatedly calls a function. |
useIntervalWhen | An useInterval variant that only runs when a specific condition is true. |
useTimeout | Sets up a timeout that calls a function after a delay. |
Hooks powered by requestAnimationFrame for smooth motion primitives.
| Hook | Description |
|---|---|
useAnimation | Manages a basic animation loop using requestAnimationFrame. |
useAnimationFrame | Runs a callback function repeatedly using requestAnimationFrame. |
FAQs
A collection of reusable React hooks
The npm package @supunlakmal/hooks receives a total of 65 weekly downloads. As such, @supunlakmal/hooks popularity was classified as not popular.
We found that @supunlakmal/hooks demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Ā It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
A Shai-Hulud infection exposed Suno's source code, which shows the AI music startup stream-ripped tracks to train its models.

Security News
Vercel is formalizing a monthly release program for Next.js. The change follows React2Shell and a sharp rise in AI-assisted vulnerability discovery.

Research
/Security News
11 malicious NuGet tools pose as game cheats to deploy Windows payloads, track hosts, and use Google Sheets for telemetry and control.