Skip to content

GTOsss/effector-react-form

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Effector-react-form

Connect your forms with state manager

Visit effector-react-form.webstap to see full documentation and examples.

QuikStart

Install

# Yarn
yarn add effector-react-form

# NPM
npm install --save effector-react-form

Short example

Create single form
import { createForm } from 'effector-react-form';

const form = createForm<Values>({
  initialValues: {
    userName: '',
    email: '',
    password: '',
    repeatPassword: '',
  },
  onSubmit: ({ values }) => // your post method,
});

Set this form to our jsx

import { useForm } from 'effector-react-form';

const validateFields = (value) => {
  if (!value) return 'Field is required';
  if (value.length < 4) return 'Minimum of 4 characters';
  return undefined;
};

const Form = () => {
  const { controller, handleSubmit, submit } = useForm({ form: formSignIn });
  return (
    <form onSubmit={handleSubmit}>
      <Input label="Name" controller={controller({ name: 'userName', validate: validateFields })} />
      <Input label="Name" controller={controller({ name: 'email', validate: validateFields })} />
      <Input label="Password" controller={controller({ name: 'password', validate: validateFields })} />
      <Input label="Repeat password" controller={controller({ name: 'repeatPassword', validate: validateFields })} />
      <button onClick={submit}>
        submit
      </button>
    </form>
  );
};

Custom Input component

const Input = ({ controller, label }) => {
  const { input,isShowError, error } = controller();

  return (
    <div className="input-wrap">
      <label>{label}</label>
      <input {...input} value={input.value || ''} className={'input'} />
      {isShowError && <div className="input-error-message">{error}</div>}
    </div>
  );
};

createForm arguments

Accepts an object with following optional params:

name: form name

validate: function, for validation values of the form.

Example:

const validateForm = ({ values }) => {
  const errors = {};

  if (values.newPassword !== values.repeatPassword) {
    errors.newPassword = 'passwordsDontMatch';
    errors.repeatPassword = 'passwordsDontMatch';
  }

  if (values.newPassword && values.newPassword === values.oldPassword) {
    errors.newPassword = 'passwordMustDiffer';
  }

  return errors;
};

mapSubmit: a function that transforms data that received from the form fields before passing it to the onSubmit function.

onSubmit: a function that fires on a form submit even.

onSubmitGuardFn: before the onSubmit function is executed, the value of this field is checked. By default, it contains a predicate function that checks if there are validation errors in form fields. If there are no errors, it returns true and onSubmit is triggered. You can pass your own predicate function that will accept the values ​​of the form fields and an object with meta.

onChange: a function that`s triggered when the form fields change. onChangeGuardFn: before the onChange function is executed, the value of this field is checked. By default, it contains a predicate function that checks if there are validation errors in form fields. If there are no errors, it will return true and onChange will be fired. You can pass your own predicate function that will accept the values of the form fields and an object with meta.

initalValues: an object with initial values of your form fields.

Example:

const initialValues = {
  name: "John",
  lastName: "Smith"
}

initialMeta: an object with initial values of your form fields.

domain: takes Effector-domain in which stores and form events will be created.

resetOuterErrorsBySubmit: takes true / false. Determines whether outer form errors should be cleared on the onSubmit event. The default is true.

resetOuterErrorByOnChange: takes true / false. Determines whether outer form errors should be cleared on the onChange event. The default is true.

Docs and Examples