UNPKG

@known-as-bmf/react-when-hooks

Version:

Reack hook toolkit to trigger useEffect, useLayoutEffect, useCallback and useMemo when a condition on dependencies is met.

107 lines (93 loc) 3.87 kB
import { useEffect, useLayoutEffect, useMemo } from 'react'; /** * `useEffect` with a predicate that all dependencies must match in order to be triggered. * @param effect The effect function to call when all the dependencies match the given predicate. * @param match The predicate function that all dependencies must match. * @param deps The dependency array. */ function useEffectWhen(effect, match, deps) { useEffect(function () { return deps.every(match) ? effect() : undefined; }, deps); } /** * `useLayoutEffect` with a predicate that all dependencies must match in order to be triggered. * @param effect The effect function to call when all the dependencies match the given predicate. * @param match The predicate function that all dependencies must match. * @param deps The dependency array. */ function useLayoutEffectWhen(effect, match, deps) { useLayoutEffect(function () { return deps.every(match) ? effect() : undefined; }, deps); } /** * `useMemo` with a predicate that all dependencies must match in order to generate the value. * @param factory The value generating function to call when all the dependencies match the given predicate. * @param match The predicate function that all dependencies must match. * @param deps The dependency array. * * @returns The value generated by the factory if all dependencies match the predicate, `undefined` otherwise. */ function useMemoWhen(factory, match, deps) { return useMemo(function () { return deps.every(match) ? factory() : undefined; }, deps); } /** * `useCallback` with a predicate that all dependencies must match in order to generate the callback. * @param callback The callback to create when all the dependencies match the given predicate. * @param match The predicate function that all dependencies must match. * @param deps The dependency array. * * @returns The callback if all dependencies match the predicate, `undefined` otherwise. */ function useCallbackWhen(callback, match, deps) { return useMemo(function () { return deps.every(match) ? callback : undefined; }, deps); } /** * Utility predicate that returns true when the argument is defined. */ var isDefined = function isDefined(arg) { return arg != null; }; /** * Shortcut for `useEffectWhen(effect, isDefined, deps)` * @param effect The effect function to call when all the dependencies are defined. * @param deps The dependency array. */ function useEffectWhenDefined(effect, deps) { useEffectWhen(effect, isDefined, deps); } /** * Shortcut for `useLayoutEffectWhen(effect, isDefined, deps)` * @param effect The effect function to call when all the dependencies are defined. * @param deps The dependency array. */ function useLayoutEffectWhenDefined(effect, deps) { useLayoutEffectWhen(effect, isDefined, deps); } /** * Shortcut for `useMemoWhen(factory, isDefined, deps)` * @param factory The value generating function to call when all the dependencies are defined. * @param deps The dependency array. * * @returns The value generated by the factory if all dependencies are defined, `undefined` otherwise. */ function useMemoWhenDefined(factory, deps) { return useMemoWhen(factory, isDefined, deps); } /** * Shortcut for `useCallbackWhen(callback, isDefined, deps)` * @param callback The callback to create when all the dependencies are defined. * @param deps The dependency array. * * @returns The callback if all dependencies are defined, `undefined` otherwise. */ function useCallbackWhenDefined(callback, deps) { return useCallbackWhen(callback, isDefined, deps); } export { useCallbackWhen, useCallbackWhenDefined, useEffectWhen, useEffectWhenDefined, useLayoutEffectWhen, useLayoutEffectWhenDefined, useMemoWhen, useMemoWhenDefined }; //# sourceMappingURL=react-when-hooks.esm.js.map