@react-hookz/web
Version:
React hooks done right, for browser and SSR.
33 lines (32 loc) • 1.13 kB
JavaScript
import { useCallback, useEffect } from 'react';
import { useSafeState, useSyncedRef } from '..';
/**
* Performs validation when any of provided dependencies has changed.
*
* @param validator Function that performs validation.
* @param deps Dependencies list that passed straight to underlying `useEffect`.
* @param initialValidity Initial validity state.
*/
export function useValidator(validator, deps, initialValidity) {
if (initialValidity === void 0) { initialValidity = { isValid: undefined }; }
var _a = useSafeState(initialValidity), validity = _a[0], setValidity = _a[1];
var validatorRef = useSyncedRef(function () {
if (validator.length) {
validator(setValidity);
}
else {
setValidity(validator());
}
});
useEffect(function () {
validatorRef.current();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, deps);
return [
validity,
useCallback(function () {
validatorRef.current();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []),
];
}