Skip to content

Commit 6496f5c

Browse files
authored
📃 Added useForm (#40)
* 📃 Added useForm * 🦾 Linting Fixes
1 parent e7968ef commit 6496f5c

4 files changed

Lines changed: 62 additions & 3 deletions

File tree

docs/README.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## 📗 Index
44

55
- [useLocalStorage](#-uselocalstorage)
6+
- [useForm](#-useform)
67
- [useStack](#-usestack)
78
- [useQueue](#-usequeue)
89
- [useDebounce](#-usedebounce)
@@ -51,6 +52,42 @@ const LocalValue = () => {
5152

5253
</br>
5354

55+
## 📃 useForm
56+
57+
Custom hook to create controlled form component.
58+
59+
### Usage
60+
61+
```jsx
62+
import React from "react";
63+
import { useForm } from "use-custom-hooks";
64+
65+
const Form = () => {
66+
const [values, onChange] = useLocalStorage({name:"",age:12});
67+
68+
return (
69+
<form>
70+
<input type="text" name="name" value={values.name} onChange={onChange}/>
71+
<input type="number" name="age" value={values.age} onChange={onChange}/>
72+
</form>
73+
);
74+
};
75+
```
76+
77+
### Parameters
78+
79+
1. `initialValue` (_Object_) : State object with name of each form input as keys and corresponding initial state as values.
80+
81+
### Return value
82+
83+
`[values,onChange]`
84+
85+
1. `values` (_Object_) : Values of input components.
86+
2. `onChange` (_function_) : Function to be added to onChange event of input component.
87+
88+
</br>
89+
90+
5491
## 📚 useStack
5592
Hook for creating and managing Stack.
5693

hooks/useForm.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { useState } from 'react';
2+
3+
/**
4+
*
5+
* Custom hook to create controlled form component.
6+
*
7+
* @param {Object} initialState State object with name of each form input as keys and
8+
* corresponding initial state as values.
9+
* @return {Array} Array containing values and onChange function respectively.
10+
*/
11+
const useForm = (initialValues) => {
12+
const [values, setValues] = useState(initialValues);
13+
14+
const onChange = (event) => {
15+
setValues((previousValues) => ({ ...previousValues, [event.target.name]: event.target.value }));
16+
};
17+
18+
return [values, onChange];
19+
};
20+
21+
export default useForm;

index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
export { default as useForm } from './hooks/useForm';
12
export { default as useState } from './hooks/useStack';
3+
export { default as useQueue } from './hooks/useQueue';
24
export { default as useToggle } from './hooks/useToggle';
35
export { default as useDarkMode } from './hooks/useDarkMode';
6+
export { default as usePrevious } from './hooks/usePrevious';
47
export { default as useDebounce } from './hooks/useDebounce';
58
export { default as useGeoLocation } from './hooks/useGeoLocation';
69
export { default as useLocalStorage } from './hooks/useLocalStorage';
710
export { default as useMousePosition } from './hooks/useMousePosition';
8-
export { default as usePrevious } from './hooks/usePrevious';
9-
export { default as useQueue } from './hooks/useQueue';

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "use-custom-hooks",
3-
"version": "1.7.0",
3+
"version": "1.8.0",
44
"description": "A collection of Custom Hooks for React.",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)