react-use

Collection of essential React Hooks

README



    👍

    react-use






npm package CircleCI master npm downloads demos
Collection of essential React Hooks. Port of libreact.
Translations: 🇨🇳 汉语




npm i react-use






- [Sensors](./docs/Sensors.md)
  - [useBattery](./docs/useBattery.md) — tracks device battery state. [![][img-demo]](https://codesandbox.io/s/qlvn662zww)
  - [useGeolocation](./docs/useGeolocation.md) — tracks geo location state of user's device. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usegeolocation--demo)
  - [useHover and useHoverDirty](./docs/useHover.md) — tracks mouse hover state of some element. [![][img-demo]](https://codesandbox.io/s/zpn583rvx)
  - [useHash](./docs/useHash.md) — tracks location hash value. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usehash--demo)
  - [useIdle](./docs/useIdle.md) — tracks whether user is being inactive.
  - [useIntersection](./docs/useIntersection.md) — tracks an HTML element's intersection. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-useintersection--demo)
  - [useKey](./docs/useKey.md), [useKeyPress](./docs/useKeyPress.md), [useKeyboardJs](./docs/useKeyboardJs.md), and [useKeyPressEvent](./docs/useKeyPressEvent.md) — track keys. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usekeypressevent--demo)
  - [useLocation](./docs/useLocation.md) and [useSearchParam](./docs/useSearchParam.md) — tracks page navigation bar location state.
  - [useLongPress](./docs/useLongPress.md) — tracks long press gesture of some element.
  - [useMedia](./docs/useMedia.md) — tracks state of a CSS media query. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usemedia--demo)
  - [useMediaDevices](./docs/useMediaDevices.md) — tracks state of connected hardware devices.
  - [useMotion](./docs/useMotion.md) — tracks state of device's motion sensor.
  - [useMouse and useMouseHovered](./docs/useMouse.md) — tracks state of mouse position. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usemouse--docs)
  - [useMouseWheel](./docs/useMouseWheel.md) — tracks deltaY of scrolled mouse wheel. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usemousewheel--docs)
  - [useNetworkState](./docs/useNetworkState.md) — tracks the state of browser's network connection. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usenetworkstate--demo)
  - [useOrientation](./docs/useOrientation.md) — tracks state of device's screen orientation.
  - [usePageLeave](./docs/usePageLeave.md) — triggers when mouse leaves page boundaries.
  - [useScratch](./docs/useScratch.md) — tracks mouse click-and-scrub state.
  - [useScroll](./docs/useScroll.md) — tracks an HTML element's scroll position. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usescroll--docs)
  - [useScrolling](./docs/useScrolling.md) — tracks whether HTML element is scrolling.
  - [useStartTyping](./docs/useStartTyping.md) — detects when user starts typing.
  - [useWindowScroll](./docs/useWindowScroll.md) — tracks Window scroll position. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usewindowscroll--docs)
  - [useWindowSize](./docs/useWindowSize.md) — tracks Window dimensions. [![][img-demo]](https://codesandbox.io/s/m7ln22668)
  - [useMeasure](./docs/useMeasure.md) and [useSize](./docs/useSize.md) — tracks an HTML element's dimensions. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usemeasure--demo)
  - [createBreakpoint](./docs/createBreakpoint.md) — tracks innerWidth
  - [useScrollbarWidth](./docs/useScrollbarWidth.md) — detects browser's native scrollbars width. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usescrollbarwidth--demo)
  - [usePinchZoom](./docs/usePinchZoom.md) — tracks pointer events to detect pinch zoom in and out status. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usePinchZoom--demo)


- [UI](./docs/UI.md)
  - [useAudio](./docs/useAudio.md) — plays audio and exposes its controls. [![][img-demo]](https://codesandbox.io/s/2o4lo6rqy)
  - [useClickAway](./docs/useClickAway.md) — triggers callback when user clicks outside target area.
  - [useCss](./docs/useCss.md) — dynamically adjusts CSS.
  - [useDrop and useDropArea](./docs/useDrop.md) — tracks file, link and copy-paste drops.
  - [useFullscreen](./docs/useFullscreen.md) — display an element or video full-screen. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/ui-usefullscreen--demo)
  - [useSlider](./docs/useSlider.md) — provides slide behavior over any HTML element. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/ui-useslider--demo)
  - [useSpeech](./docs/useSpeech.md) — synthesizes speech from a text string. [![][img-demo]](https://codesandbox.io/s/n090mqz69m)
  - [useVibrate](./docs/useVibrate.md) — provide physical feedback using the Vibration API. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/ui-usevibrate--demo)
  - [useVideo](./docs/useVideo.md) — plays video, tracks its state, and exposes playback controls. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/ui-usevideo--demo)


- [Animations](./docs/Animations.md)
  - [useRaf](./docs/useRaf.md) — re-renders component on each requestAnimationFrame.
  - [useInterval](./docs/useInterval.md) and [useHarmonicIntervalFn](./docs/useHarmonicIntervalFn.md) — re-renders component on a set interval using setInterval.
  - [useSpring](./docs/useSpring.md) — interpolates number over time according to spring dynamics.
  - [useTimeout](./docs/useTimeout.md) — re-renders component after a timeout.
  - [useTimeoutFn](./docs/useTimeoutFn.md) — calls given function after a timeout. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/animation-usetimeoutfn--demo)
  - [useTween](./docs/useTween.md) — re-renders component, while tweening a number from 0 to 1. [![][img-demo]](https://codesandbox.io/s/52990wwzyl)
  - [useUpdate](./docs/useUpdate.md) — returns a callback, which re-renders component when called.


- [Side-effects](./docs/Side-effects.md)
  - [useAsync](./docs/useAsync.md), [useAsyncFn](./docs/useAsyncFn.md), and [useAsyncRetry](./docs/useAsyncRetry.md) — resolves an async function.
  - [useBeforeUnload](./docs/useBeforeUnload.md) — shows browser alert when user try to reload or close the page.
  - [useCookie](./docs/useCookie.md) — provides way to read, update and delete a cookie. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-usecookie--demo)
  - [useCopyToClipboard](./docs/useCopyToClipboard.md) — copies text to clipboard.
  - [useDebounce](./docs/useDebounce.md) — debounces a function. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-usedebounce--demo)
  - [useError](./docs/useError.md) — error dispatcher. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-useerror--demo)
  - [useFavicon](./docs/useFavicon.md) — sets favicon of the page.
  - [useLocalStorage](./docs/useLocalStorage.md) — manages a value in localStorage.
  - [useLockBodyScroll](./docs/useLockBodyScroll.md) — lock scrolling of the body element.
  - [useRafLoop](./docs/useRafLoop.md) — calls given function inside the RAF loop.
  - [useSessionStorage](./docs/useSessionStorage.md) — manages a value in sessionStorage.
  - [useThrottle and useThrottleFn](./docs/useThrottle.md) — throttles a function. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-usethrottle--demo)
  - [useTitle](./docs/useTitle.md) — sets title of the page.
  - [usePermission](./docs/usePermission.md) — query permission status for browser APIs.


- [Lifecycles](./docs/Lifecycles.md)
  - [useEffectOnce](./docs/useEffectOnce.md) — a modified [useEffect](https://reactjs.org/docs/hooks-reference.html#useeffect) hook that only runs once.
  - [useEvent](./docs/useEvent.md) — subscribe to events.
  - [useLifecycles](./docs/useLifecycles.md) — calls mount and unmount callbacks.
  - [useMountedState](./docs/useMountedState.md) and [useUnmountPromise](./docs/useUnmountPromise.md) — track if component is mounted.
  - [usePromise](./docs/usePromise.md) — resolves promise only while component is mounted.
  - [useLogger](./docs/useLogger.md) — logs in console as component goes through life-cycles.
  - [useMount](./docs/useMount.md) — calls mount callbacks.
  - [useUnmount](./docs/useUnmount.md) — calls unmount callbacks.
  - [useUpdateEffect](./docs/useUpdateEffect.md) — run an effect only on updates.
  - [useIsomorphicLayoutEffect](./docs/useIsomorphicLayoutEffect.md) — useLayoutEffect that that works on server.
  - [useDeepCompareEffect](./docs/useDeepCompareEffect.md), [useShallowCompareEffect](./docs/useShallowCompareEffect.md), and [useCustomCompareEffect](./docs/useCustomCompareEffect.md)


- [State](./docs/State.md)
  - [createMemo](./docs/createMemo.md) — factory of memoized hooks.
  - [createReducer](./docs/createReducer.md) — factory of reducer hooks with custom middleware.
  - [createReducerContext](./docs/createReducerContext.md) and [createStateContext](./docs/createStateContext.md) — factory of hooks for a sharing state between components.
  - [useDefault](./docs/useDefault.md) — returns the default value when state is null or undefined.
  - [useGetSet](./docs/useGetSet.md) — returns state getter get() instead of raw state.
  - [useGetSetState](./docs/useGetSetState.md) — as if [useGetSet](./docs/useGetSet.md) and [useSetState](./docs/useSetState.md) had a baby.
  - [useLatest](./docs/useLatest.md) — returns the latest state or props
  - [usePrevious](./docs/usePrevious.md) — returns the previous state or props. [![][img-demo]](https://codesandbox.io/s/fervent-galileo-krgx6)
  - [usePreviousDistinct](./docs/usePreviousDistinct.md) — like usePrevious but with a predicate to determine if previous should update.
  - [useObservable](./docs/useObservable.md) — tracks latest value of an Observable.
  - [useRafState](./docs/useRafState.md) — creates setState method which only updates after requestAnimationFrame. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-userafstate--demo)
  - [useSetState](./docs/useSetState.md) — creates setState method which works like this.setState. [![][img-demo]](https://codesandbox.io/s/n75zqn1xp0)
  - [useStateList](./docs/useStateList.md) — circularly iterates over an array. [![][img-demo]](https://codesandbox.io/s/bold-dewdney-pjzkd)
  - [useToggle and useBoolean](./docs/useToggle.md) — tracks state of a boolean. [![][img-demo]](https://codesandbox.io/s/focused-sammet-brw2d)
  - [useCounter and useNumber](./docs/useCounter.md) — tracks state of a number. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usecounter--demo)
  - [useList](./docs/useList.md) and [useUpsert](./docs/useUpsert.md) — tracks state of an array. [![][img-demo]](https://codesandbox.io/s/wonderful-mahavira-1sm0w)
  - [useMap](./docs/useMap.md) — tracks state of an object. [![][img-demo]](https://codesandbox.io/s/quirky-dewdney-gi161)
  - [useSet](./docs/useSet.md) — tracks state of a Set. [![][img-demo]](https://codesandbox.io/s/bold-shtern-6jlgw)
  - [useQueue](./docs/useQueue.md) — implements simple queue.
  - [useStateValidator](./docs/useStateValidator.md) — tracks state of an object. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usestatevalidator--demo)
  - [useStateWithHistory](./docs/useStateWithHistory.md) — stores previous state values and provides handles to travel through them. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usestatewithhistory--demo)
  - [useMultiStateValidator](./docs/useMultiStateValidator.md) — alike the useStateValidator, but tracks multiple states at a time. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usemultistatevalidator--demo)
  - [useMediatedState](./docs/useMediatedState.md) — like the regular useState but with mediation by custom function. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usemediatedstate--demo)
  - [useFirstMountState](./docs/useFirstMountState.md) — check if current render is first. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usefirstmountstate--demo)
  - [useRendersCount](./docs/useRendersCount.md) — count component renders. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-userenderscount--demo)
  - [createGlobalState](./docs/createGlobalState.md) — cross component shared state.[![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-createglobalstate--demo)
  - [useMethods](./docs/useMethods.md) — neat alternative to useReducer. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usemethods--demo)


- [Miscellaneous]()
  - [useEnsuredForwardedRef](./docs/useEnsuredForwardedRef.md) and [ensuredForwardRef](./docs/useEnsuredForwardedRef.md) — use a React.forwardedRef safely. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-useensuredforwardedref--demo)




Usage — how to import.
Unlicense — public domain.
Support — add yourself to backer list below.




[img-demo]: https://img.shields.io/badge/demo-%20%20%20%F0%9F%9A%80-green.svg

Contributors