1.1.8 • Published 4 years ago

react-use-form-control v1.1.8

Weekly downloads
4
License
ISC
Repository
github
Last release
4 years ago

React Use Form

Small Reactjs hook to manage forms and forms controls.

Getting Started

npm install react-use-form-control

Requires react@^16.13.1 as a peer dependency.

Basic Usage

Basic usage

Here's an example of basic usage: inputname= is required, without the input property name is hard to identify the control on input event

import React from  "react";
import  { useForm }  from  "react-use-form-control";
const controls =  {
	task:  {
		value:  "",
	},
	assignto:  {
		value:  "",
	},
};

const  Todo  =  ()  =>  {
	const  { form, handleControlEvent }  =  useForm(controls);

	return (
	<div  className={"todo-list-main"}>
		<form>
			<input
				name="task" // should be unique
				placeholder="Task"
				value={form.controls.task.value}
				onChange={handleControlEvent}
			/>

			<input
				name="assignto"
				placeholder="Assign To"
				value={form.controls.assignto.value}
				onChange={handleControlEvent}
			/>
			<button  className="primary"  type="button">Save</button>
		</form>
	</div>);
};

export  default Todo;

Using validators

This example apply a validation function (type ValidatorFunction = (value: any) => boolean). This validation function will be executed always the control changes.

The validators property is an array of validators functions, so you can define many validation function as you require.

import React from  "react";
import  { useForm }  from  "react-use-form-control";

const  isRequired  =  (value)  =>  {
	return value;
};

const controls =  {
	task:  {
		value:  "",
		validators: [{
			validatorfunction: isRequired,
			errorMessage:  "Name is required",
		}],
	},
	assignto:  {
		value:  "",
		validators: [{
			validatorfunction: isRequired,
			errorMessage:  "Assing to is required",
		}],
	},
};

const  Todo  =  ()  =>  {
const  { form, handleControlEvent }  =  useForm(controls);

return (
	<div  className={"todo-list-main"}>
		<form>
			{Object.keys(form.controls).map((key) =>
				form.controls[key].error && (
				<span  className={"error-message"}>
					{form.controls[key].errorMessage}
				</span>
				)
			)}
			<input
				name="task"
				placeholder="Task"
				value={form.controls.task.value}
				onChange={handleControlEvent}
			/>
			<input
				name="assignto"
				placeholder="Assign To"
				value={form.controls.assignto.value}
				onChange={handleControlEvent}
			/>
			<button  className="primary"  type="button"  disabled={!form.valid}>
				Save
			</button>
		</form>
	</div>);
};

export  default Todo;

Dependencies between controls

Many times we have dependencies between controls and we need apply validations based on that.

import React from  "react";
import  { useForm }  from  "react-use-form-control";

const  isRequired  =  (value)  =>  {
	return value;
};
const  lunchOnlyForJohn=  function(value)  {
	return  this.task.value ===  'Lunch'  && value ===  'John Smith';
}

const controls =  {
	task:  {
		value:  "",
		validators: [{
			validatorfunction: isRequired,
			errorMessage:  "Name is required",
		}],
	},
	assignto:  {
		value:  "",
		validators: [{
			validatorfunction: lunchOnlyForJohn,
			errorMessage:  "The Lunch task must be assigned to John Smith",
		}],
	},
};

const  Todo  =  ()  =>  {
const  { form, handleControlEvent }  =  useForm(controls);

return (
	<div  className={"todo-list-main"}>
		<form>
			{Object.keys(form.controls).map((key) =>
				form.controls[key].error && (
				<span  className={"error-message"}>
				{form.controls[key].errorMessage}
				</span>
			))}
			<input
				name="task"
				placeholder="Task"
				value={form.controls.task.value}
				onChange={handleControlEvent}
			/>
			<input
				name="assignto"
				placeholder="Assign To"
				value={form.controls.assignto.value}
				onChange={handleControlEvent}
			/>
			<button  className="primary"  type="button"  disabled={!form.valid}>
				Save
			</button>
		</form>
	</div>
);
};

export  default Todo;

useForm

PropertyDescription
formtype of Form
handleControlEventControl Event (Example: onChange, onClick, etc..)
setFormControlValueSometimes is necessary to update control value without dispatch a control event. Update specific control passing key and value
resetFormReset the controls to the initial state
addFormControlAdd new control, args: name, control( type of FormControl
removeFormControlRemove control, if has relation with other control an error will be throw

Form

PropertyType
controls{key: string: FormControl}
validBoolean (optional)
valueObject {controlName: string: value}

FormControl

PropertyType
valueany
errorBoolean (optional)
errorMessagestring (optional)
validatorsArray of ControlValidator (optional)
touchedboolean, the default value is false

ControlValidator

PropertyType
validatorfunctiontype ValidatorFunction = (value: any) => boolean;
errorMessagestring
1.1.8

4 years ago

1.1.7

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.1

4 years ago

1.1.2

4 years ago

1.1.0

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago