UNPKG

@react-hookz/web

Version:

React hooks done right, for browser and SSR.

33 lines (32 loc) 1.13 kB
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 }, []), ]; }