@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
JavaScript
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