form manager
npm install effector-react-formshell
Yarn
yarn add effector-react-form
NPM
npm install --save effector-react-form
`
Short example
Create single form
`js
import { createForm } from 'effector-react-form';
const form = createForm({
initialValues: {
userName: '',
email: '',
password: '',
repeatPassword: '',
},
onSubmit: ({ values }) => // your post method,
});
`
Set this form to our jsx
`tsx
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 (
);
};
`
Custom Input component
`tsx
const Input = ({ controller, label }) => {
const { input,isShowError, error } = controller();
return (
{isShowError && {error}}
);
};
`
createForm arguments
Accepts an object with following optional params:
name: form name
validate: function, for validation values of the form.
Example:
`tsx
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 thats triggered when the form fields change.
ts
const initialValues = {
name: "John",
lastName: "Smith"
}
``