@react-hookz/web
is a library of general-purpose React hooks built with care and SSR compatibility
in mind.
This one is pretty simple, everyone knows what to do:
npm i @react-hookz/web
# or
yarn add @react-hookz/web
As hooks was introduced to the world in React 16.8, @react-hookz/web
requires - you guessed it -
react
and react-dom
16.8+.
Also, as React does not support IE, @react-hookz/web
don't either.
This package distributed with ESNext language level and ES modules system. It means that depending on your browser _target you might need to transpile it. Every major bundler provides a way to transpile
node_modules
fully or partially. Address your bundler documentation for more details.
You can import hooks two ways:
// from the root of package
import {useMountEffect} from '@react-hookz/web';
// or single hook directly
import {useMountEffect} from '@react-hookz/web/useMountEffect/index.js';
In case your bundler supports tree-shaking (most of modern does) - both variants are equal and only necessary code will get into your bundle. Direct hook imports should be considered otherwise.
@react-hookz/web
was built as
a spiritual successor of react-use
by one of
its former maintainers.
-
useDebouncedCallback
— Makes passed function debounced, otherwise acts likeuseCallback
.useRafCallback
— Makes passed function to be called within next animation frame.useThrottledCallback
— Makes passed function throttled, otherwise acts likeuseCallback
.
-
useConditionalEffect
— LikeuseEffect
but callback invoked only if given conditions match a given predicate.useCustomCompareEffect
— LikeuseEffect
but uses a provided comparator function to validate dependency changes.useDebouncedEffect
— LikeuseEffect
, but passed function is debounced.useDeepCompareEffect
— LikeuseEffect
but uses@react-hookz/deep-equal
comparator function to validate deep dependency changes.useFirstMountState
— Returns a boolean that istrue
only on first render.useIntervalEffect
— LikesetInterval
but in the form of a React hook.useIsMounted
— Returns a function that yields current mount state.useIsomorphicLayoutEffect
— LikeuseLayoutEffect
but falls back touseEffect
during SSR.useMountEffect
— Run an effect only when a component mounts.useRafEffect
— LikeuseEffect
, but the effect is only run within an animation frame.useRerender
— Returns a callback that re-renders the component.useThrottledEffect
— LikeuseEffect
, but the passed function is throttled.useTimeoutEffect
— LikesetTimeout
, but in the form of a React hook.useUnmountEffect
— Run an effect only when a component unmounts.useUpdateEffect
— An effect hook that ignores the first render (not invoked on mount).useLifecycleLogger
— This hook provides logging when the component mounts, updates and unmounts.
-
useControlledRerenderState
— LikeuseState
, but its state setter accepts an extra argument, that allows cancelling renders.useCounter
— Tracks a numeric value and offers functions for manipulating it.useDebouncedState
— LikeuseState
but its state setter is debounced.useFunctionalState
— LikeuseState
but instead of raw state, a state getter function is returned.useList
— Tracks a list and offers functions for manipulating it.useMap
— Tracks the state of aMap
.useMediatedState
— LikeuseState
, but every value set is passed through a mediator function.usePrevious
— Returns the value passed to the hook on previous render.usePreviousDistinct
— Returns the most recent distinct value passed to the hook on previous renders.useQueue
— A state hook implementing FIFO queue.useRafState
— LikeReact.useState
, but state is only updated within animation frame.useRenderCount
— Tracks component's render count including first render.useSet
— Tracks the state of aSet
.useToggle
— LikeuseState
, but can only betrue
orfalse
.useThrottledState
— LikeuseState
but its state setter is throttled.useValidator
— Performs validation when any of the provided dependencies change.
-
useNetworkState
— Tracks the state of the browser's network connection.useVibrate
— Provides vibration feedback using the Vibration API.usePermission
— Tracks the state of a permission.
-
useSyncedRef
— LikeuseRef
, but it returns an immutable ref that contains the actual value.useCustomCompareMemo
— LikeuseMemo
but uses provided comparator function to validate dependency changes.useDeepCompareMemo
— LikeuseMemo
but uses@react-hookz/deep-equal
comparator function to validate deep dependency changes.useHookableRef
— LikeuseRef
but it is possible to define handlers for getting and setting the value.
-
useAsync
— Executes provided async function and tracks its results and errors.useAsyncAbortable
— LikeuseAsync
, but also providesAbortSignal
as first function argument to the async function.useCookieValue
— Manages a single cookie.useLocalStorageValue
— Manages a single LocalStorage key.useSessionStorageValue
— Manages a single SessionStorage key.
-
useIntersectionObserver
— Observe changes in the intersection of a _target element with an ancestor element or with the viewport.useMeasure
— UsesResizeObserver
to track an element's dimensions and to re-render the component when they change.useMediaQuery
— Tracks the state of a CSS media query.useResizeObserver
— Invokes a callback wheneverResizeObserver
detects a change to the _target's size.useScreenOrientation
— Checks if the screen is inportrait
orlandscape
orientation and automatically re-renders on orientation change.useDocumentVisibility
— Tracks document visibility state.
-
useClickOutside
— Triggers a callback when the user clicks outside a _target element.useEventListener
— Subscribes an event listener to a _target element.useKeyboardEvent
— Invokes a callback when a keyboard event occurs on the chosen _target.useWindowSize
— Tracks the inner dimensions of the browser window.