npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

reactuals

v1.1.5

Published

A useful package providing a collection of 50+ React hooks and utilities to simplify React development.

Readme

Reactuals

npm license downloads

Reactuals is a lightweight, powerful collection of 55+ custom React hooks designed to streamline frontend development, optimize performance, and enhance user experience. Each hook solves specific real-world challenges, from handling user interactions to managing state persistence, making your React applications more efficient, accessible, and intuitive. Built with TypeScript for type safety, these hooks are easy to integrate, highly reusable, and performance-focused.

Check Latest Bundle Size

  • Minified 18.4 kB
  • Minified + Gzipped 5.6 kB

Installation

Install the package via npm or yarn:

npm install reactuals
yarn add reactuals

Documentation

For detailed usage, parameters, and examples of each hook, visit our official documentation.

Available Hooks

The following table lists all hooks provided by reactuals, along with their descriptions:

| Hook Name | Description | | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | useClickAnywhere | Detects clicks anywhere on the document, useful for closing modals or dropdowns when clicking outside specific elements. | | useKeyPress | Tracks when a specific key is pressed, enabling keyboard shortcuts or interactive controls in applications. | | useWindowResize | Monitors window resize events, providing current window dimensions for responsive layouts or dynamic UI adjustments. | | useDebounce | Delays a value update until a specified time has passed without changes, optimizing performance for inputs like search or form validation. | | useInterval | Runs a function at specified intervals, ideal for timers, polls, or animations that need controlled execution. | | useLocalStorage | Synchronizes state with localStorage, persisting data across browser sessions for user preferences or settings. | | useOnScreen | Detects if a DOM element is visible in the viewport using the Intersection Observer API, enabling lazy-loading or visibility triggers. | | usePrevious | Returns the previous value of a state or prop, useful for tracking changes or implementing undo/redo functionality. | | useTimeout | Executes a function after a specified delay, suitable for delayed actions like tooltips or auto-saving forms. | | useToggle | Manages a boolean state with a toggle function, simplifying on/off or show/hide UI patterns. | | useFocusTrap | Traps keyboard focus within a DOM element, enhancing accessibility for modals or dialogs by preventing focus escape. | | useMediaQuery | Tracks whether a CSS media query matches, enabling responsive design or conditional rendering based on screen size or device. | | useOnClickOutside | Detects clicks outside a specified DOM element, perfect for closing popovers, menus, or modals when clicking elsewhere. | | useScrollPosition | Returns the current vertical scroll position (scrollY) of the window, powering scroll-based features like progress bars or navigation aids. | | useClipboard | Provides copy-to-clipboard functionality, simplifying text copying for user convenience in forms or code snippets. | | useConditionalEffect | Runs a useEffect only when specified conditions are met, reducing unnecessary side effects for optimized performance. | | useDocumentTitle | Dynamically updates the document’s title, enhancing SEO and user navigation in single-page applications. | | useElementSize | Tracks the dimensions of a DOM element, useful for dynamic layouts or resizing-aware components like charts or modals. | | useFavicon | Updates the browser’s favicon dynamically, ideal for branding or visual cues like notifications in web apps. | | useHover | Detects when a DOM element is hovered, enabling interactive hover effects or tooltips without complex event handling. | | useIsMounted | Returns a boolean indicating if a component is mounted, preventing state updates on unmounted components to avoid memory leaks. | | useOnlineStatus | Monitors the browser’s online/offline status, allowing adaptive UI or data syncing behavior based on network availability. | | usePageExit | Detects when a user attempts to leave a page, enabling prompts to save unsaved changes or confirm navigation. | | useRenderCount | Tracks the number of times a component has rendered, aiding in debugging performance issues and identifying unnecessary re-renders. | | useScrollDirection | Detects the scroll direction ("up" or "down") of the window, ideal for dynamic UI effects like hiding/showing navigation elements. | | useSessionStorage | Synchronizes state with sessionStorage, persisting data across page refreshes within a browser session for temporary storage. | | useThrottle | Throttles a value to update only after a specified delay, optimizing performance in input-heavy scenarios like search or live filters. | | useTimeoutToggle | Toggles a boolean state after a delay, useful for temporary UI states like notifications or alerts that auto-dismiss. | | useUpdateEffect | Runs an effect only on updates (not on initial mount), simplifying logic for side effects triggered by state or prop changes. | | useWhyDidYouUpdate | Logs changes to props or state that cause re-renders, helping debug performance issues by identifying unnecessary updates. | | useClickAndHold | Detects when a user clicks and holds on an element, enabling long-press interactions like context menus or drag initiators. | | useGeoLocation | Tracks the user’s geolocation (latitude and longitude) using the browser’s Geolocation API, with options for high accuracy and error handling. Useful for location-based features like showing nearby stores, weather updates, or map integrations. | | useIdleTimeout | Detects user inactivity (no mouse, keyboard, or touch events) after a specified timeout, resetting on user activity. Useful for implementing auto-logout, session timeouts, or pausing resource-intensive tasks when the user is idle. | | useSwipe | Detects swipe gestures (left, right, up, down) on a DOM element by tracking touch events, with customizable thresholds. Ideal for touch-friendly navigation, such as carousels, mobile menus, or gesture-based interactions. | | useNetworkSpeed | Monitors the user’s network connection speed (effective type, e.g., "4g", "3g", "slow-2g") and downlink speed (Mbps) using the Network Information API, if available. Useful for adaptive content loading, such as reducing image quality or disabling video autoplay on slow connections to enhance performance and user experience. | | useBatteryStatus | Tracks the device’s battery level and charging status using the Battery Status API, if supported. Ideal for optimizing power-intensive tasks (e.g., animations, polling) when battery is low or notifying users of charging state in mobile or web apps. | | useTextSelection | Tracks the currently selected text in the document or a specific DOM element, returning the selected text and its range. Useful for implementing features like text highlighting, copy-to-clipboard enhancements, or context-aware text editing tools in content-heavy applications. |

Why Use Reactuals?

  • Lightweight: Minimal bundle size with no dependencies, > 5kb .
  • Type-Safe: Written in TypeScript for robust type checking.
  • Performance-Optimized: Hooks are designed to minimize re-renders and resource usage.
  • Real-World Focused: Each hook addresses practical challenges, from accessibility to performance.
  • Comprehensive Docs: Detailed guidance available at reactuals.vercel.app.

Contributing

Contributions are welcome! To contribute:

  1. Fork the repository.
  2. Create a feature branch (git checkout -b feature/new-hook).
  3. Commit your changes (git commit -m "Add new hook").).
  4. Push to the to branch (push origin feature/new-hook).
  5. Open a pull requestRequest).

Please ensure your code aligns with follows the existing style, includes tests, and updates documentation.

License

MIT License. See LICENSE for details.

Support

For issues, or feature requests, please open an issue, or feature request on the GitHub repository. We’re here to help!


Builtmade with ❤️ for the React community. Happy coding!