State
useForm
Controlled form state with one change handler.
Demo
live · imported from hookli
{
"name": "",
"email": ""
}import { useForm } from "hookli";
export function Demo() {
const { values, handleChange, resetForm } = useForm({ name: "", email: "" });
return (
<form onSubmit={(e) => e.preventDefault()}>
<input name="name" value={values.name} onChange={handleChange} />
<input name="email" type="email" value={values.email} onChange={handleChange} />
<button type="button" onClick={resetForm}>Reset</button>
</form>
);
}Usage
import { useForm } from "hookli";
export function Demo() {
const { values, handleChange, resetForm } = useForm({ name: "", email: "" });
return (
<form onSubmit={(e) => e.preventDefault()}>
<input name="name" value={values.name} onChange={handleChange} />
<input name="email" type="email" value={values.email} onChange={handleChange} />
<button type="button" onClick={resetForm}>Reset</button>
</form>
);
}API
useForm<T>(initialState: T): { values: T; handleChange: (e: ChangeEvent) => void; resetForm: () => void }Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| initialState | T | — | Initial field values. Keys must match the name attribute of each input. |
Returns
| Name | Type | Description |
|---|---|---|
| values | T | The current form values. |
| handleChange | (event: ChangeEvent) => void | One change handler for every named input, textarea and select. |
| resetForm | () => void | Restores initialState. |
Hook
The implementation, straight from hookli. Copy it, or install the package.
import { ChangeEvent, useState } from "react";
interface UseFormValues {
[key: string]: string | number | boolean;
}
export const useForm = <T extends UseFormValues>(initialState: T) => {
const [values, setValues] = useState<T>(initialState);
const handleChange = (
event: ChangeEvent<
HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement
>,
) => {
const { name, value } = event.target;
setValues((prevValues) => ({ ...prevValues, [name]: value }));
};
const resetForm = () => {
setValues(initialState);
};
return { values, handleChange, resetForm };
};