Skip to content

Files

Latest commit

 

History

History
47 lines (42 loc) Β· 1.56 KB

useStateValidator.md

File metadata and controls

47 lines (42 loc) Β· 1.56 KB

useStateValidator

Each time given state changes - validator function is invoked.

Usage

import * as React from 'react';
import { useCallback } from 'react';
import { useStateValidator } from 'react-use';

const DemoStateValidator = s => [s === '' ? null : (s * 1) % 2 === 0];
const Demo = () => {
  const [state, setState] = React.useState<string | number>(0);
  const [[isValid]] = useStateValidator(state, DemoStateValidator);

  return (
    <div>
      <div>Below field is valid only if number is even</div>
      <input
        type="number"
        min="0"
        max="10"
        value={state}
        onChange={(ev: React.ChangeEvent<HTMLInputElement>) => {
          setState(ev.target.value);
        }}
      />
      {isValid !== null && <span>{isValid ? 'Valid!' : 'Invalid'}</span>}
    </div>
  );
};

Reference

const [validity, revalidate] = useStateValidator(
  state: any,
  validator: (state, setValidity?)=>[boolean|null, ...any[]],
  initialValidity: any
);
  • validity: [boolean|null, ...any[]] result of validity check. First element is strictly nullable boolean, but others can contain arbitrary data;
  • revalidate: ()=>void runs validator once again
  • validator: (state, setValidity?)=>[boolean|null, ...any[]] should return an array suitable for validity state described above;
    • state - current state;
    • setValidity - if defined hook will not trigger validity change automatically. Useful for async validators;
  • initialValidity - validity value which set when validity is nt calculated yet;