{"_id":"@alexius.xz/react-use-test","name":"@alexius.xz/react-use-test","dist-tags":{"beta":"0.0.1","latest":"0.0.1"},"versions":{"0.0.1":{"name":"@alexius.xz/react-use-test","version":"0.0.1","description":"Collection of React Hooks","main":"lib/index.js","module":"esm/index.js","sideEffects":false,"types":"lib/index.d.ts","typings":"lib/index.d.ts","scripts":{"start":"yarn storybook","test":"jest --maxWorkers 2","test:ssr":"jest --maxWorkers 2 --config ./jest.config.node.ts","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint \"{src,tests,stories}/**/*.{ts,tsx}\"","lint:fix":"yarn lint --fix","lint:types":"tsc --noEmit","build:cjs":"tsc","build:es":"tsc -m esNext --outDir esm","build":"yarn build:cjs && yarn build:es","clean":"rimraf lib storybook-static esm","storybook":"start-storybook -p 6008","storybook:build":"build-storybook","storybook:upload":"gh-pages -d storybook-static --git \"$(which git)\"","storybook:clean":"rimraf storybook-static","release":"semantic-release"},"husky":{"hooks":{"pre-commit":"lint-staged","pre-push":"yarn lint && yarn clean && yarn build && yarn test"}},"author":{"name":"@streamich"},"license":"Unlicense","repository":{"type":"git","url":"git+https://github.com/streamich/react-use.git"},"bugs":{"url":"https://github.com/streamich/react-use/issues"},"homepage":"https://github.com/streamich/react-use#readme","dependencies":{"@types/js-cookie":"^2.2.6","@xobotyi/scrollbar-width":"^1.9.5","copy-to-clipboard":"^3.3.1","fast-deep-equal":"^3.1.3","fast-shallow-equal":"^1.0.0","js-cookie":"^2.2.1","nano-css":"^5.6.2","react-universal-interface":"^0.6.2","resize-observer-polyfill":"^1.5.1","screenfull":"^5.1.0","set-harmonic-interval":"^1.0.1","throttle-debounce":"^3.0.1","ts-easing":"^0.2.0","tslib":"^2.1.0"},"peerDependencies":{"react":"*","react-dom":"*"},"devDependencies":{"@babel/core":"7.24.9","@babel/plugin-syntax-dynamic-import":"7.8.3","@babel/preset-env":"7.24.8","@babel/preset-react":"7.24.7","@babel/preset-typescript":"7.24.7","@semantic-release/changelog":"6.0.3","@semantic-release/git":"10.0.1","@semantic-release/npm":"12.0.1","@shopify/jest-dom-mocks":"2.11.7","@storybook/addon-actions":"6.4.9","@storybook/addon-knobs":"6.4.0","@storybook/addon-notes":"5.3.21","@storybook/addon-options":"5.3.21","@storybook/react":"6.4.9","@testing-library/react":"12.1.2","@testing-library/react-hooks":"7.0.2","@types/jest":"27.5.2","@types/react":"17.0.0","@typescript-eslint/eslint-plugin":"5.62.0","@typescript-eslint/parser":"5.62.0","babel-core":"6.26.3","babel-eslint":"10.1.0","babel-loader":"8.3.0","babel-plugin-dynamic-import-node":"2.3.3","eslint":"8.57.0","eslint-config-prettier":"8.10.0","eslint-config-react-app":"6.0.0","eslint-plugin-flowtype":"8.0.3","eslint-plugin-import":"2.29.1","eslint-plugin-jsx-a11y":"6.9.0","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.35.0","eslint-plugin-react-hooks":"4.6.0","fork-ts-checker-webpack-plugin":"6.5.3","gh-pages":"5.0.0","husky":"7.0.4","jest":"26.6.3","jest-localstorage-mock":"2.4.26","keyboardjs":"2.7.0","lint-staged":"12.5.0","markdown-loader":"6.0.0","prettier":"2.3.0","raf-stub":"3.0.0","react":"17.0.2","react-dom":"17.0.2","react-frame-component":"5.2.7","react-spring":"9.7.4","react-test-renderer":"17.0.2","rebound":"0.1.0","redux-logger":"3.0.6","redux-thunk":"2.4.2","rimraf":"3.0.2","rxjs":"7.8.1","semantic-release":"24.0.0","ts-jest":"26.5.6","ts-loader":"8.4.0","ts-node":"10.9.2","typescript":"4.1.5"},"config":{"commitizen":{"path":"git-cz"}},"release":{"branches":["master",{"name":"next","prerelease":"rc"}],"verifyConditions":["@semantic-release/changelog","@semantic-release/npm","@semantic-release/git"],"prepare":["@semantic-release/changelog","@semantic-release/npm","@semantic-release/git"]},"lint-staged":{"src/**/**/*.{ts,tsx}":["eslint --fix","git add"]},"volta":{"node":"14.21.3","yarn":"1.22.22"},"collective":{"type":"opencollective","url":"https://opencollective.com/react-use"},"_id":"@alexius.xz/react-use-test@0.0.1","gitHead":"ad33f76dfff7ddb041a9ef74b80656a94affaa80","_nodeVersion":"18.20.4","_npmVersion":"10.7.0","dist":{"integrity":"sha512-c4lsHOxo+LwsoPilaEt5oYDt3mZb5X9SNv+DCJJQqpEmQZAn1ydZnZzIYyW3AghmZV3yB58e52AotaVwpb5S5g==","shasum":"39e6a4b588ff1cc838735e8b6b47f485bab91d08","tarball":"https://registry.npmjs.org/@alexius.xz/react-use-test/-/react-use-test-0.0.1.tgz","fileCount":511,"unpackedSize":453855,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBH1X3j0t1wYk97SvT6SWHUwbCTnoWL+yWVBrJ1xjt12AiEA+oBuOQ3unYISVKtq7XJvJK58dwIpiAGkG12GELbVf3E="}]},"_npmUser":{"name":"alexius.xz","email":"alexius.xz@gmail.com"},"directories":{},"maintainers":[{"name":"alexius.xz","email":"alexius.xz@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-use-test_0.0.1_1740077730910_0.2782385253211095"},"_hasShrinkwrap":false}},"time":{"created":"2025-02-20T18:55:30.847Z","0.0.1":"2025-02-20T18:55:31.130Z","modified":"2025-02-20T18:55:31.346Z"},"maintainers":[{"name":"alexius.xz","email":"alexius.xz@gmail.com"}],"description":"Collection of React Hooks","homepage":"https://github.com/streamich/react-use#readme","repository":{"type":"git","url":"git+https://github.com/streamich/react-use.git"},"author":{"name":"@streamich"},"bugs":{"url":"https://github.com/streamich/react-use/issues"},"license":"Unlicense","readme":"<div align=\"center\">\n  <h1>\n    <br/>\n    <br/>\n    👍\n    <br />\n    react-use\n    <br />\n    <br />\n    <br />\n    <br />\n  </h1>\n  <sup>\n    <br />\n    <br />\n    <a href=\"https://www.npmjs.com/package/react-use\">\n       <img src=\"https://img.shields.io/npm/v/react-use.svg\" alt=\"npm package\" />\n    </a>\n    <a href=\"https://circleci.com/gh/streamich/react-use\">\n      <img src=\"https://img.shields.io/circleci/project/github/streamich/react-use/master.svg\" alt=\"CircleCI master\" />\n    </a>\n    <a href=\"https://www.npmjs.com/package/react-use\">\n      <img src=\"https://img.shields.io/npm/dm/react-use.svg\" alt=\"npm downloads\" />\n    </a>\n    <a href=\"http://streamich.github.io/react-use\">\n      <img src=\"https://img.shields.io/badge/demos-🚀-yellow.svg\" alt=\"demos\" />\n    </a>\n    <br />\n    Collection of essential <a href=\"https://reactjs.org/docs/hooks-intro.html\">React Hooks</a>.</em>\n    <em>Port of</em> <a href=\"https://github.com/streamich/libreact\"><code>libreact</code></a>.\n    <br />\n    Translations: <a href=\"https://github.com/zenghongtu/react-use-chinese/blob/master/README.md\">🇨🇳 汉语</a>\n  </sup>\n  <br />\n  <br />\n  <br />\n  <br />\n  <pre>npm i <a href=\"https://www.npmjs.com/package/react-use\">react-use</a></pre>\n  <br />\n  <br />\n  <br />\n  <br />\n  <br />\n</div>\n\n- [**Sensors**](./docs/Sensors.md)\n  - [`useBattery`](./docs/useBattery.md) &mdash; tracks device battery state. [![][img-demo]](https://codesandbox.io/s/qlvn662zww)\n  - [`useGeolocation`](./docs/useGeolocation.md) &mdash; tracks geo location state of user's device. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usegeolocation--demo)\n  - [`useHover` and `useHoverDirty`](./docs/useHover.md) &mdash; tracks mouse hover state of some element. [![][img-demo]](https://codesandbox.io/s/zpn583rvx)\n  - [`useHash`](./docs/useHash.md) &mdash; tracks location hash value. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usehash--demo)\n  - [`useIdle`](./docs/useIdle.md) &mdash; tracks whether user is being inactive.\n  - [`useIntersection`](./docs/useIntersection.md) &mdash; tracks an HTML element's intersection. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-useintersection--demo)\n  - [`useKey`](./docs/useKey.md), [`useKeyPress`](./docs/useKeyPress.md), [`useKeyboardJs`](./docs/useKeyboardJs.md), and [`useKeyPressEvent`](./docs/useKeyPressEvent.md) &mdash; track keys. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usekeypressevent--demo)\n  - [`useLocation`](./docs/useLocation.md) and [`useSearchParam`](./docs/useSearchParam.md) &mdash; tracks page navigation bar location state.\n  - [`useLongPress`](./docs/useLongPress.md) &mdash; tracks long press gesture of some element.\n  - [`useMedia`](./docs/useMedia.md) &mdash; tracks state of a CSS media query. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usemedia--demo)\n  - [`useMediaDevices`](./docs/useMediaDevices.md) &mdash; tracks state of connected hardware devices.\n  - [`useMotion`](./docs/useMotion.md) &mdash; tracks state of device's motion sensor.\n  - [`useMouse` and `useMouseHovered`](./docs/useMouse.md) &mdash; tracks state of mouse position. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usemouse--docs)\n  - [`useMouseWheel`](./docs/useMouseWheel.md) &mdash; tracks deltaY of scrolled mouse wheel. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usemousewheel--docs)\n  - [`useNetworkState`](./docs/useNetworkState.md) &mdash; tracks the state of browser's network connection. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usenetworkstate--demo)\n  - [`useOrientation`](./docs/useOrientation.md) &mdash; tracks state of device's screen orientation.\n  - [`usePageLeave`](./docs/usePageLeave.md) &mdash; triggers when mouse leaves page boundaries.\n  - [`useScratch`](./docs/useScratch.md) &mdash; tracks mouse click-and-scrub state.\n  - [`useScroll`](./docs/useScroll.md) &mdash; tracks an HTML element's scroll position. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usescroll--docs)\n  - [`useScrolling`](./docs/useScrolling.md) &mdash; tracks whether HTML element is scrolling.\n  - [`useStartTyping`](./docs/useStartTyping.md) &mdash; detects when user starts typing.\n  - [`useWindowScroll`](./docs/useWindowScroll.md) &mdash; tracks `Window` scroll position. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usewindowscroll--docs)\n  - [`useWindowSize`](./docs/useWindowSize.md) &mdash; tracks `Window` dimensions. [![][img-demo]](https://codesandbox.io/s/m7ln22668)\n  - [`useMeasure`](./docs/useMeasure.md) and [`useSize`](./docs/useSize.md) &mdash; tracks an HTML element's dimensions. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usemeasure--demo)\n  - [`createBreakpoint`](./docs/createBreakpoint.md) &mdash; tracks `innerWidth`\n  - [`useScrollbarWidth`](./docs/useScrollbarWidth.md) &mdash; detects browser's native scrollbars width. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usescrollbarwidth--demo)\n  - [`usePinchZoom`](./docs/usePinchZoom.md) &mdash; tracks pointer events to detect pinch zoom in and out status. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usePinchZoom--demo)\n    <br/>\n    <br/>\n- [**UI**](./docs/UI.md)\n  - [`useAudio`](./docs/useAudio.md) &mdash; plays audio and exposes its controls. [![][img-demo]](https://codesandbox.io/s/2o4lo6rqy)\n  - [`useClickAway`](./docs/useClickAway.md) &mdash; triggers callback when user clicks outside target area.\n  - [`useCss`](./docs/useCss.md) &mdash; dynamically adjusts CSS.\n  - [`useDrop` and `useDropArea`](./docs/useDrop.md) &mdash; tracks file, link and copy-paste drops.\n  - [`useFullscreen`](./docs/useFullscreen.md) &mdash; display an element or video full-screen. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/ui-usefullscreen--demo)\n  - [`useSlider`](./docs/useSlider.md) &mdash; provides slide behavior over any HTML element. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/ui-useslider--demo)\n  - [`useSpeech`](./docs/useSpeech.md) &mdash; synthesizes speech from a text string. [![][img-demo]](https://codesandbox.io/s/n090mqz69m)\n  - [`useVibrate`](./docs/useVibrate.md) &mdash; provide physical feedback using the [Vibration API](https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API). [![][img-demo]](https://streamich.github.io/react-use/?path=/story/ui-usevibrate--demo)\n  - [`useVideo`](./docs/useVideo.md) &mdash; plays video, tracks its state, and exposes playback controls. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/ui-usevideo--demo)\n    <br/>\n    <br/>\n- [**Animations**](./docs/Animations.md)\n  - [`useRaf`](./docs/useRaf.md) &mdash; re-renders component on each `requestAnimationFrame`.\n  - [`useInterval`](./docs/useInterval.md) and [`useHarmonicIntervalFn`](./docs/useHarmonicIntervalFn.md) &mdash; re-renders component on a set interval using `setInterval`.\n  - [`useSpring`](./docs/useSpring.md) &mdash; interpolates number over time according to spring dynamics.\n  - [`useTimeout`](./docs/useTimeout.md) &mdash; re-renders component after a timeout.\n  - [`useTimeoutFn`](./docs/useTimeoutFn.md) &mdash; calls given function after a timeout. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/animation-usetimeoutfn--demo)\n  - [`useTween`](./docs/useTween.md) &mdash; re-renders component, while tweening a number from 0 to 1. [![][img-demo]](https://codesandbox.io/s/52990wwzyl)\n  - [`useUpdate`](./docs/useUpdate.md) &mdash; returns a callback, which re-renders component when called.\n    <br/>\n    <br/>\n- [**Side-effects**](./docs/Side-effects.md)\n  - [`useAsync`](./docs/useAsync.md), [`useAsyncFn`](./docs/useAsyncFn.md), and [`useAsyncRetry`](./docs/useAsyncRetry.md) &mdash; resolves an `async` function.\n  - [`useBeforeUnload`](./docs/useBeforeUnload.md) &mdash; shows browser alert when user try to reload or close the page.\n  - [`useCookie`](./docs/useCookie.md) &mdash; provides way to read, update and delete a cookie. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-usecookie--demo)\n  - [`useCopyToClipboard`](./docs/useCopyToClipboard.md) &mdash; copies text to clipboard.\n  - [`useDebounce`](./docs/useDebounce.md) &mdash; debounces a function. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-usedebounce--demo)\n  - [`useError`](./docs/useError.md) &mdash; error dispatcher. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-useerror--demo)\n  - [`useFavicon`](./docs/useFavicon.md) &mdash; sets favicon of the page.\n  - [`useLocalStorage`](./docs/useLocalStorage.md) &mdash; manages a value in `localStorage`.\n  - [`useLockBodyScroll`](./docs/useLockBodyScroll.md) &mdash; lock scrolling of the body element.\n  - [`useRafLoop`](./docs/useRafLoop.md) &mdash; calls given function inside the RAF loop.\n  - [`useSessionStorage`](./docs/useSessionStorage.md) &mdash; manages a value in `sessionStorage`.\n  - [`useThrottle` and `useThrottleFn`](./docs/useThrottle.md) &mdash; throttles a function. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-usethrottle--demo)\n  - [`useTitle`](./docs/useTitle.md) &mdash; sets title of the page.\n  - [`usePermission`](./docs/usePermission.md) &mdash; query permission status for browser APIs.\n    <br/>\n    <br/>\n- [**Lifecycles**](./docs/Lifecycles.md)\n  - [`useEffectOnce`](./docs/useEffectOnce.md) &mdash; a modified [`useEffect`](https://reactjs.org/docs/hooks-reference.html#useeffect) hook that only runs once.\n  - [`useEvent`](./docs/useEvent.md) &mdash; subscribe to events.\n  - [`useLifecycles`](./docs/useLifecycles.md) &mdash; calls `mount` and `unmount` callbacks.\n  - [`useMountedState`](./docs/useMountedState.md) and [`useUnmountPromise`](./docs/useUnmountPromise.md) &mdash; track if component is mounted.\n  - [`usePromise`](./docs/usePromise.md) &mdash; resolves promise only while component is mounted.\n  - [`useLogger`](./docs/useLogger.md) &mdash; logs in console as component goes through life-cycles.\n  - [`useMount`](./docs/useMount.md) &mdash; calls `mount` callbacks.\n  - [`useUnmount`](./docs/useUnmount.md) &mdash; calls `unmount` callbacks.\n  - [`useUpdateEffect`](./docs/useUpdateEffect.md) &mdash; run an `effect` only on updates.\n  - [`useIsomorphicLayoutEffect`](./docs/useIsomorphicLayoutEffect.md) &mdash; `useLayoutEffect` that that works on server.\n  - [`useDeepCompareEffect`](./docs/useDeepCompareEffect.md), [`useShallowCompareEffect`](./docs/useShallowCompareEffect.md), and [`useCustomCompareEffect`](./docs/useCustomCompareEffect.md)\n    <br/>\n    <br/>\n- [**State**](./docs/State.md)\n  - [`createMemo`](./docs/createMemo.md) &mdash; factory of memoized hooks.\n  - [`createReducer`](./docs/createReducer.md) &mdash; factory of reducer hooks with custom middleware.\n  - [`createReducerContext`](./docs/createReducerContext.md) and [`createStateContext`](./docs/createStateContext.md) &mdash; factory of hooks for a sharing state between components.\n  - [`useDefault`](./docs/useDefault.md) &mdash; returns the default value when state is `null` or `undefined`.\n  - [`useGetSet`](./docs/useGetSet.md) &mdash; returns state getter `get()` instead of raw state.\n  - [`useGetSetState`](./docs/useGetSetState.md) &mdash; as if [`useGetSet`](./docs/useGetSet.md) and [`useSetState`](./docs/useSetState.md) had a baby.\n  - [`useLatest`](./docs/useLatest.md) &mdash; returns the latest state or props\n  - [`usePrevious`](./docs/usePrevious.md) &mdash; returns the previous state or props. [![][img-demo]](https://codesandbox.io/s/fervent-galileo-krgx6)\n  - [`usePreviousDistinct`](./docs/usePreviousDistinct.md) &mdash; like `usePrevious` but with a predicate to determine if `previous` should update.\n  - [`useObservable`](./docs/useObservable.md) &mdash; tracks latest value of an `Observable`.\n  - [`useRafState`](./docs/useRafState.md) &mdash; creates `setState` method which only updates after `requestAnimationFrame`. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-userafstate--demo)\n  - [`useSetState`](./docs/useSetState.md) &mdash; creates `setState` method which works like `this.setState`. [![][img-demo]](https://codesandbox.io/s/n75zqn1xp0)\n  - [`useStateList`](./docs/useStateList.md) &mdash; circularly iterates over an array. [![][img-demo]](https://codesandbox.io/s/bold-dewdney-pjzkd)\n  - [`useToggle` and `useBoolean`](./docs/useToggle.md) &mdash; tracks state of a boolean. [![][img-demo]](https://codesandbox.io/s/focused-sammet-brw2d)\n  - [`useCounter` and `useNumber`](./docs/useCounter.md) &mdash; tracks state of a number. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usecounter--demo)\n  - [`useList`](./docs/useList.md) ~and [`useUpsert`](./docs/useUpsert.md)~ &mdash; tracks state of an array. [![][img-demo]](https://codesandbox.io/s/wonderful-mahavira-1sm0w)\n  - [`useMap`](./docs/useMap.md) &mdash; tracks state of an object. [![][img-demo]](https://codesandbox.io/s/quirky-dewdney-gi161)\n  - [`useSet`](./docs/useSet.md) &mdash; tracks state of a Set. [![][img-demo]](https://codesandbox.io/s/bold-shtern-6jlgw)\n  - [`useQueue`](./docs/useQueue.md) &mdash; implements simple queue.\n  - [`useStateValidator`](./docs/useStateValidator.md) &mdash; tracks state of an object. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usestatevalidator--demo)\n  - [`useStateWithHistory`](./docs/useStateWithHistory.md) &mdash; stores previous state values and provides handles to travel through them. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usestatewithhistory--demo)\n  - [`useMultiStateValidator`](./docs/useMultiStateValidator.md) &mdash; alike the `useStateValidator`, but tracks multiple states at a time. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usemultistatevalidator--demo)\n  - [`useMediatedState`](./docs/useMediatedState.md) &mdash; like the regular `useState` but with mediation by custom function. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usemediatedstate--demo)\n  - [`useFirstMountState`](./docs/useFirstMountState.md) &mdash; check if current render is first. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usefirstmountstate--demo)\n  - [`useRendersCount`](./docs/useRendersCount.md) &mdash; count component renders. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-userenderscount--demo)\n  - [`createGlobalState`](./docs/createGlobalState.md) &mdash; cross component shared state.[![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-createglobalstate--demo)\n  - [`useMethods`](./docs/useMethods.md) &mdash; neat alternative to `useReducer`. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usemethods--demo)\n    <br/>\n    <br/>\n- [**Miscellaneous**]()\n  - [`useEnsuredForwardedRef`](./docs/useEnsuredForwardedRef.md) and [`ensuredForwardRef`](./docs/useEnsuredForwardedRef.md) &mdash; use a React.forwardedRef safely. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-useensuredforwardedref--demo)\n\n<br />\n<br />\n<br />\n<br />\n<br />\n<br />\n<br />\n\n<p align=\"center\">\n  <a href=\"./docs/Usage.md\"><strong>Usage</strong></a> &mdash; how to import.\n  <br />\n  <a href=\"./LICENSE\"><strong>Unlicense</strong></a> &mdash; public domain.\n  <br />\n  <a href=\"https://opencollective.com/react-use/contribute\"><strong>Support</strong></a> &mdash; add yourself to backer list below.\n</p>\n\n<br />\n<br />\n<br />\n<br />\n<br />\n\n[img-demo]: https://img.shields.io/badge/demo-%20%20%20%F0%9F%9A%80-green.svg\n\n<div align=\"center\">\n  <h1>Contributors</h1>\n</div>\n\n<br />\n<br />\n\n<a href=\"https://github.com/streamich/react-use/graphs/contributors\"><img src=\"https://opencollective.com/react-use/contributors.svg?width=890&button=false\" /></a>\n\n<br />\n<br />\n<br />\n<br />\n<br />\n","readmeFilename":"README.md"}