项目作者: overmise

项目描述 :
Multipurpose React validation hook
高级语言: CSS
项目地址: git://github.com/overmise/use-validator.git
创建时间: 2020-03-17T11:40:10Z
项目社区:https://github.com/overmise/use-validator

开源协议:

下载


@overmise/use-validator

Validation hook for React

@overmise/use-validator"">NPM JavaScript Style Guide

Install

  1. npm install --save @overmise/use-validator

Usage

  1. import React, { useEffect, useState } from 'react'
  2. import { useValidator, useError } from '@overmise/use-validator'
  3. const SCHEMA = {
  4. username: '',
  5. email: '',
  6. password: ''
  7. }
  8. const Form = () => {
  9. const validator = useValidator()
  10. const [firstError, hasError] = useError()
  11. const [data, setData] = useState(SCHEMA)
  12. const [errors, setErrors] = useState(SCHEMA)
  13. const handleSubmit = (event) => {
  14. event.preventDefault()
  15. const [validates, errors] = validator(data, {
  16. username: ['required', 'min:3', 'max:255'],
  17. email: ['required', 'email'],
  18. password: ['required', 'min:8']
  19. })
  20. setErrors(errors)
  21. if (validates) {
  22. // Perform request...
  23. console.log(data)
  24. } else {
  25. console.error(errors)
  26. }
  27. }
  28. return (
  29. <form onSubmit={(event) => handleSubmit(event)}>
  30. <fieldset>
  31. <label htmlFor="username">Username</label>
  32. <input
  33. id="username"
  34. name="username"
  35. value={data.username}
  36. onChange={(event) => setData({ ...data, username: event.target.value })}
  37. styles={hasError(errors.username) ? { border: '1px solid red' } : { border: '1px solid #ccc' }}
  38. />
  39. {hasError(errors.username) && <span>{firstError(errors.username)}</span>}
  40. </fieldset>
  41. <fieldset>
  42. <label htmlFor="email">Email</label>
  43. <input
  44. id="email"
  45. name="email"
  46. type="email"
  47. value={data.email}
  48. onChange={(event) => setData({ ...data, email: event.target.value })}
  49. styles={hasError(errors.email) ? { border: '1px solid red' } : { border: '1px solid #ccc' }}
  50. />
  51. {hasError(errors.email) && <span>{firstError(errors.email)}</span>}
  52. </fieldset>
  53. <fieldset>
  54. <label htmlFor="password">Password</label>
  55. <input
  56. type="password"
  57. value={data.password}
  58. onChange={(event) => setData({ ...data, password: event.target.value })}
  59. styles={hasError(errors.password) ? { border: '1px solid red' } : { border: '1px solid #ccc' }}
  60. />
  61. {hasError(errors.password) && <span>{firstError(errors.password)}</span>}
  62. </fieldset>
  63. </form>
  64. )
  65. }

License

MIT © Ben Villiere