项目作者: 87Hz

项目描述 :
React H(ookF)orm.
高级语言: TypeScript
项目地址: git://github.com/87Hz/react-horm.git
创建时间: 2019-05-18T09:09:45Z
项目社区:https://github.com/87Hz/react-horm

开源协议:MIT License

下载


react-horm

React H(ookF)orm

This package will provide formik-like features with React Hook Support.

It uses context internally, which means as long as it is rendered within Horm, you could get access to the form by using hooks instead of passing any reference down deeply to the field component. It will be very handy especially for those complex FormInput which is defined outside of the main form.

TechStack

  • React (with Hook)
  • ramda
  • Yup

Installation

  1. yarn add react-horm

Usage

  1. import { Horm, useField, useForm, useCountDown } from 'react-horm';

APIs

Horm (Component)

  1. // render form as children
  2. <Horm>
  3. <FormComponent ></FormComponent>
  4. </Horm>
  5. // render form as prop
  6. <Horm render={FormComponent} ></Horm>

Horm props:

  • initialValues [required]: Initial form values, it MUST contains all the fields.
  • onSubmit [required]: It will be called in useForm.htmlProps.onSubmit if the form is valid.

  • initialValid [optional]: Initial value of useForm.hormBag.isValid

  • validateOnBlur [optional]: Default is true. Whether validation should be run in case of blur and focus.
  • validateOnChange [optional]: Default is true. Whether validation should be run in case of value change.
  • enableReinitialize [optional]: Default is false. If set as true, the form will be reset in case of new initialValues passed in.
  • validationSchema [optional]: Yup schema. See example below.
  • validationFn [optional]: Validation function which takes form values as parameter and return object contains field errors. See example below.
  1. const validationSchema = Yup.object().shape({
  2. email: Yup.string()
  3. .email()
  4. .required(),
  5. password: Yup.string()
  6. .min(6)
  7. .required(),
  8. });
  1. const validationFn: ValidationFn = (values) => {
  2. let errors: FormState<string[]> = { email: [], password: [] };
  3. if (values.email.length === 0) {
  4. errors.email.push('Email cannot be empty');
  5. }
  6. if (values.password.length === 0) {
  7. errors.password.push('Password cannot be empty');
  8. }
  9. return errors;
  10. };

useForm (Hook)

  1. // Example
  2. const loginForm = useForm();
  3. <LoginForm {...loginForm.htmlProps} ></LoginForm>;

loginForm.hormBag

  • dirty
  • errors
  • isValid
  • isValidating
  • touched
  • values

loginForm.htmlProps

  • onSubmit

useField (Hook)

  1. // Example
  2. const emailField = useField('email');
  3. <input {...emailField.htmlProps} />;

emailField.hormBag

  • value
  • initialValue
  • dirty
  • touched
  • errors
  • isValid
  • setValue
  • setTouched
  • setErrors

emailField.htmlProps

  • name
  • value
  • onChange
  • onFocus
  • onBlur

useCountDown (Hook)

It is normally used to limit users’ interactions with a particular function within given period (e.g sending SMS OTP code).

  1. // Example
  2. const [val, restart] = useCountDown(120);

val will be 0 initially, once restart is called, val will be running from the starting value you pass to the hook (120 seconds in the example above) and stops at 0. The restart function could be called multiple times, and the val will be reset to the starting value and counting down again, regardless of current value.