项目作者: imbhargav5

项目描述 :
Essential hooks ⚓ to super charge your components!
高级语言: TypeScript
项目地址: git://github.com/imbhargav5/rooks.git
创建时间: 2018-11-08T16:14:39Z
项目社区:https://github.com/imbhargav5/rooks

开源协议:MIT License

下载












Why Rooks ?









CI and Semantic Release
GitHub release (latest by date)
GitHub
Codecov branch






npm
npm bundle size
Module
node-lts






GitHub contributors
Website
GitHub stars






Collection of awesome react hooks







📚 Table of Contents


🚀 Quick Start

Get up and running in seconds:

  1. npm install rooks
  2. # or
  3. yarn add rooks
  4. # or
  5. pnpm add rooks

Import any hook and start using it:

  1. import { useDidMount, useCounter, useToggle } from "rooks";
  2. function App() {
  3. const { value, increment, decrement } = useCounter(0);
  4. const [isOn, toggleIsOn] = useToggle(false);
  5. useDidMount(() => {
  6. console.log("Component mounted! 🎉");
  7. });
  8. return (
  9. <div>
  10. <h1>Count: {value}</h1>
  11. <button onClick={increment}>Increment</button>
  12. <button onClick={decrement}>Decrement</button>
  13. <h2>Toggle is {isOn ? "ON" : "OFF"}</h2>
  14. <button onClick={toggleIsOn}>Toggle</button>
  15. </div>
  16. );
  17. }

📖 Browse all hooks🎮 Try in CodeSandbox


✨ Why Rooks?


























🎯 Focused
Each hook does one thing well
📦 Tree-shakeable
Import only what you need
🔄 SSR Ready
Works with Next.js, Remix, Gatsby
🧪 Well Tested
95%+ code coverage
📚 Documented
Every hook has examples & demos
TypeScript First
Full type safety out of the box
🎨 Modern
Built for React 18+ with ESM
🤝 Community Driven
82 contributors and growing


State Management













useCounter

Counter with increment/decrement

useToggle

Toggle between values

useLocalstorageState

useState with localStorage sync

const { value, increment }

= useCounter(0)

const [on, toggle]

= useToggle()

const [user, setUser]

= useLocalstorageState(‘user’)

Event Handling








useKey

Keyboard event handling

useOutsideClick

Detect clicks outside element

useOnClickRef

Click handler with ref

Lifecycle & Effects








useDidMount

componentDidMount equivalent

useWillUnmount

componentWillUnmount equivalent

useDebounce

Debounce any value


List of all hooks


🎬 Animation & Timing - 9 hooks





useAnimation - Animation hook for React useIntervalWhen - Sets an interval immediately when a condition is true
useLockBodyScroll - This hook locks the scroll of the body element when isLocked is set to true. usePrefersReducedMotion - A React hook that returns true if the user has enabled the ‘prefers-reduced-motion’ setting in their system.
useRaf - A continuously running requestAnimationFrame hook for React useResizeObserverRef - Resize Observer hook for React.
useSpring - Spring animation hook for React useTimeoutWhen - Takes a callback and fires it when a condition is true
* useTween - Tween animation hook for React



🌐 Browser APIs - 16 hooks





useBroadcastChannel - A React hook that provides a clean interface to the Broadcast Channel API for cross-tab/window communication useClipboard - Clipboard read/write operations hook for React
useGeolocation - A hook to provide the geolocation info on client side. useIdleDetectionApi - Hook to detect when user is idle using Idle Detection API with polyfill
useMediaRecorder - Audio/video recording from MediaStream useNetworkInformation - Network connection quality detection hook for React
useNavigatorLanguage - Navigator Language hook for React. useNotification - Browser notifications with permission handling
useOnline - Online status hook for React. useOrientation - orientation hook for react
useScreenDetailsApi - Hook for multi-screen information and management using Screen Details API useWebLocksApi - Hook for coordinating operations across tabs/workers with Web Locks API
useShare - Web Share API for native sharing useSpeech - Speech synthesis hook for React
useFetch - Hook for fetching data from URLs with loading states, error handling, and automatic JSON parsing useVibrate - Vibration API hook for React



🛠️ Development & Debugging - 1 hook





* useRenderCount - Get the render count of a component



🚀 Events - 16 hooks





useDocumentEventListener - A react hook to an event listener to the document object useDocumentVisibilityState - Returns the visibility state of the document.
useFocus - Handles focus events for the immediate target element. useFocusWithin - Handles focus events for the target component.
useIsDroppingFiles - Check if any files are currently being dropped anywhere. Useful for highlighting drop areas. useOnClickRef - Callback on click/tap events
useOnHoverRef - On hover callback hook useOnLongHover - Fires a callback when an element is hovered for a while
useOnLongPress - Fire a callback on long press useOnStartTyping - Fires a callback when the user starts typing outside editable fields (input, textarea, contenteditable). Supports filtering for a-z and 0-9 keys.
useOnWindowResize - A React hook for adding an event listener for window resize useOnWindowScroll - A React hook for adding an event listener for window scroll
useOutsideClick - Outside click(for a ref) event as hook for React. useOutsideClickRef - A hook that can track a click event outside a ref. Returns a callbackRef.
usePageLeave - Page leave detection with callbacks for beforeunload and visibility change useWindowEventListener - Adds an event listener to window



📝 Form & File Handling - 3 hooks





useCheckboxInputState - Simple checkbox state management hook that provides a boolean state and props that can be spread directly onto a checkbox input element useFileDropRef - Drop files easily
* useFormState - Comprehensive form state management with validation



⌨️ Keyboard & Input - 5 hooks





useInput - Input hook for React. useKey - keypress, keyup and keydown event handlers as hooks for react.
useKeyBindings - useKeyBindings can bind multiple keys to multiple callbacks and fire the callbacks on key press. useKeyRef - Very similar useKey but it returns a ref
* useKeys - A hook which allows to setup callbacks when a combination of keys are pressed at the same time.



🔥 Lifecycle & Effects - 11 hooks





useAsyncEffect - A version of useEffect that accepts an async function useDebouncedAsyncEffect - A version of useEffect that accepts an async function and debounces its execution based on dependency changes
useDebouncedEffect - A version of useEffect that debounces the effect execution based on dependency changes useDeepCompareEffect - Deep compare dependencies instead of shallow for useEffect
useDidMount - componentDidMount hook for React useDidUpdate - componentDidUpdate hook for react
useDocumentTitle - A hook to easily update document title with React useEffectOnceWhen - Runs a callback effect atmost one time when a condition becomes true
useIsomorphicEffect - A hook that resolves to useEffect on the server and useLayoutEffect on the client. useLifecycleLogger - A react hook that console logs parameters as component transitions through lifecycles.
* useWillUnmount - componentWillUnmount lifecycle as hook for React.



🖱️ Mouse & Touch - 3 hooks





useMouse - Mouse position hook for React. useMouseMoveDelta - Tracks delta of mouse move
* useMouseWheelDelta - Tracks delta of mouse move



⚡ Performance & Optimization - 5 hooks





useDebounce - Debounce hook for react useDebouncedValue - Tracks another value and gets updated in a debounced way.
useDebounceFn - Powerful debounce function hook for React useThrottle - Throttle custom hook for React
* useWebWorker - Web Worker management with message passing



❇️ State - 18 hooks





useArrayState - Array state manager hook for React useCountdown - Count down to a target timestamp and call callbacks every second (or provided peried)
useCounter - Counter hook for React. useGetIsMounted - Checks if a component is mounted or not at the time. Useful for async effects
useLocalstorageState - UseState but auto updates values to localStorage useMapState - A react hook to manage state in a key value pair map.
useMultiSelectableList - A custom hook to easily select multiple values from a list useNativeMapState - Manage Map() object state in React
usePreviousDifferent - usePreviousDifferent returns the last different value of a variable usePreviousImmediate - usePreviousImmediate returns the previous value of a variable even if it was the same or different
usePromise - Promise management hook for react useQueueState - A React hook that manages state in the form of a queue
useSafeSetState - set state but ignores if component has already unmounted useSelect - Select values from a list easily. List selection hook for react.
useSelectableList - Easily select a single value from a list of values. very useful for radio buttons, select inputs etc. useSessionstorageState - useState but syncs with sessionstorage
useSetState - Manage the state of a Set in React. useStackState - A React hook that manages state in the form of a stack



🔄 State History & Time Travel - 4 hooks





useTimeTravelState - A hook that manages state which can undo and redo. A more powerful version of useUndoState hook. useToggle - Toggle (between booleans or custom data)hook for React.
useUndoRedoState - Setstate but can also undo and redo useUndoState - Drop in replacement for useState hook but with undo functionality.



⚛️ UI - 14 hooks





useAudio - Audio hook useBoundingclientrect - getBoundingClientRect hook for React.
useBoundingclientrectRef - A hook that tracks the boundingclientrect of an element. It returns a callbackRef so that the element node if changed is easily tracked. useDimensionsRef - Easily grab dimensions of an element with a ref using this hook
useFullscreen - Use full screen api for making beautiful and emersive experinces. useMeasure - Measures both inner and outer dimensions of any DOM element in a performant way and updates when dimensions change
useIntersectionObserverRef - A hook to register an intersection observer listener. useInViewRef - Simple hook that monitors element enters or leave the viewport that’s using Intersection Observer API.
useMediaMatch - Signal whether or not a media query is currently matched. useMutationObserver - Mutation Observer hook for React.
useMutationObserverRef - A hook that tracks mutations of an element. It returns a callbackRef. usePictureInPictureApi - Hook for managing Picture-in-Picture video functionality
usePreferredColorScheme - Color scheme preference detection (dark/light mode) useVideo - Video hook for react



🔧 Utilities & Refs - 7 hooks





useEventListenerRef - A react hook to add an event listener to a ref useForkRef - A hook that can combine two refs(mutable or callbackRefs) into a single callbackRef
useFreshCallback - Avoid stale closures and keep your callback fresh useFreshRef - Avoid stale state in callbacks with this hook. Auto updates values using a ref.
useFreshTick - Like use-fresh-ref but specifically for functions useMergeRefs - Merges any number of refs into a single ref
* useRefElement - Helps bridge gap between callback ref and state



📱 Window & Viewport - 2 hooks





useWindowScrollPosition - A React hook to get the scroll position of the window useWindowSize - Window size hook for React.



🧪 Experimental Hooks - 5 hooks





useSuspenseNavigatorBattery - Suspense-enabled hook for getting battery status information from Navigator Battery API useSuspenseNavigatorUserAgentData - Suspense-enabled hook for getting high entropy values from Navigator User Agent Data API
useSuspenseLocalStorageState - Suspense-enabled hook for localStorage state management with cross-tab synchronization useSuspenseSessionStorageState - Suspense-enabled hook for sessionStorage state management with proper serialization
* useSuspenseIndexedDBState - Suspense-enabled hook for IndexedDB state management with structured data storage and cross-tab synchronization


⚠️ Experimental hooks may be removed or significantly changed in any release without notice. Use with caution in production.








Features

✅ Collection of 119 hooks as standalone modules.

✅ Standalone package with all the hooks at one place

✅ Built for ESM

Installation

  1. npm i -s rooks

Import any hook from “rooks” and start using them!

  1. import { useDidMount } from "rooks";

Usage

  1. function App() {
  2. useDidMount(() => {
  3. alert("mounted");
  4. });
  5. return (
  6. <div className="App">
  7. <h1>Hello CodeSandbox</h1>
  8. <h2>Start editing to see some magic happen!</h2>
  9. </div>
  10. );
  11. }

Standalone Package

Package containing all the hooks is over here. - Docs and Npm Install


License

MIT

Contributors ✨

All Contributors

Thanks goes to these wonderful people (emoji key):


View all 82 contributors




















































































































Bhargav Ponnapalli
Bhargav Ponnapalli

💻 🚧
anil kumar chaudhary
anil kumar chaudhary

💻
Qiwei Yang
Qiwei Yang

💻 🚧
maciek_grzybek
maciek_grzybek

💻
Harsh Zalavadiya
Harsh Zalavadiya

💻
B V K MAHIJENDRA
B V K MAHIJENDRA

💻
Braxton Christensen
Braxton Christensen

💻
Hansel
Hansel

💻
Harshil Parmar
Harshil Parmar

💻
Lionel
Lionel

💻
Max Stoiber
Max Stoiber

💻
Michael Moore
Michael Moore

💻
Rajas Paranjpe
Rajas Paranjpe

💻
Mahendra Choudhary
Mahendra Choudhary

💻
Nghia Pham
Nghia Pham

💻
Akshay Kadam (A2K)
Akshay Kadam (A2K)

💻
Alex Golubtsov
Alex Golubtsov

💻
Arman
Arman

💻
Branden Visser
Branden Visser

💻
Brian Steere
Brian Steere

💻
Cal Courtney
Cal Courtney

💻
Chris Milson
Chris Milson

💻
Cong Zhang
Cong Zhang

💻
Daniel Holmes
Daniel Holmes

💻
Fernando Beck
Fernando Beck

💻
Josh Davenport
Josh Davenport

💻
MARCEL
MARCEL

💻
Neilor Caldeira
Neilor Caldeira

💻
Tobias Lins
Tobias Lins

💻
Tsvetan
Tsvetan

💻
Wei Zhu
Wei Zhu

💻
Yakko Majuri
Yakko Majuri

💻
Frank Hellwig
Frank Hellwig

💻
Austin Peterson
Austin Peterson

💻
thodubois
thodubois

💻
wes christiansen
wes christiansen

💻
CJ Patoilo
CJ Patoilo

💻
mar1u50
mar1u50

💻
Ayushman Gupta
Ayushman Gupta

💻
Rafael Ferreira
Rafael Ferreira

💻
Kristinn Thor Johannsson
Kristinn Thor Johannsson

💻
Michael Moore
Michael Moore

💻
Trevor Blades
Trevor Blades

💻
official_dulin
official_dulin

💻
Billy Mosis Priambodo
Billy Mosis Priambodo

💻
Stafford Williams
Stafford Williams

💻
Chanhee Kim
Chanhee Kim

💻
Hooriza
Hooriza

💻
Nils Wittler
Nils Wittler

💻
Sebastian Szczepański
Sebastian Szczepański

💻
Mahendra Choudhary
Mahendra Choudhary

💻
Som Shekhar Mukherjee
Som Shekhar Mukherjee

💻
Qiushi Pan
Qiushi Pan

💻
Jishnu Viswanath
Jishnu Viswanath

💻
brahambence
brahambence

💻
dependabot[bot]
dependabot[bot]

💻
renovate[bot]
renovate[bot]

💻
dependabot-preview[bot]
dependabot-preview[bot]

💻
github-actions[bot]
github-actions[bot]

💻
allcontributors[bot]
allcontributors[bot]

💻
zhangenming
zhangenming

💻
Antoni Kiszka
Antoni Kiszka

💻
Greg Poole
Greg Poole

💻
mergify[bot]
mergify[bot]

💻
Chaitanya J
Chaitanya J

💻
G H Mahimaanvita
G H Mahimaanvita

💻
Danilo Woznica
Danilo Woznica

💻
dan-klasson
dan-klasson

💻
Sébastien Vanvelthem
Sébastien Vanvelthem

💻
Aleksandr Soldatov
Aleksandr Soldatov

💻
Eli Yukelzon
Eli Yukelzon

💻
Mahendra Choudhary
Mahendra Choudhary

💻
Chaitanya J
Chaitanya J

💻
Dominik Dorfmeister
Dominik Dorfmeister

💻
Nghiệp
Nghiệp

💻
Seongmin Park
Seongmin Park

💻
Nate Higgins
Nate Higgins

💻
Michael Moore
Michael Moore

💻
Moritz Brandes
Moritz Brandes

💻
Som Shekhar Mukherjee
Som Shekhar Mukherjee

💻
cursor[bot]
cursor[bot]

💻
JulianWielga
JulianWielga

💻









Other hooks libraries

These are some libraries that I constantly take inspiration and ideas from

  1. React-use
  2. React-aria
  3. Valtio
  4. Jotai
  5. Recoil
  6. Downshiftjs
  7. React hook form