use-validate-field.tsx 487 B

123456789101112131415161718192021
  1. import { useState } from 'react'
  2. type Target = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement
  3. function useValidateField<T extends { target: Target }>() {
  4. const [isValid, setIsValid] = useState(true)
  5. const validate = (e: T) => {
  6. let isValid = e.target.checkValidity()
  7. if (e.target.required) {
  8. isValid = isValid && Boolean(e.target.value.trim().length)
  9. }
  10. setIsValid(isValid)
  11. }
  12. return { validate, isValid }
  13. }
  14. export default useValidateField