To implement a custom hook for handling form submissions in React, you can create a reusable hook that manages form state, handles input changes, and submits the form data. Here's a basic example of how to create such a custom hook:
jsximport { useState } from 'react';
const useForm = (initialValues, onSubmit) => {
const [values, setValues] = useState(initialValues);
const handleChange = (event) => {
const { name, value } = event.target;
setValues({ ...values, [name]: value });
};
const handleSubmit = (event) => {
event.preventDefault();
onSubmit(values);
};
const resetForm = () => {
setValues(initialValues);
};
return { values, handleChange, handleSubmit, resetForm };
};
export default useForm;
In this custom hook:
initialValues
: An object containing the initial values for the form fields.onSubmit
: A function that will be called when the form is submitted, receiving the form values as an argument.The hook returns an object containing:
values
: The current values of the form fields.handleChange
: A function to handle changes to the form fields.handleSubmit
: A function to handle form submission.resetForm
: A function to reset the form fields to their initial values.You can then use this custom hook in your components like this:
jsximport React from 'react';
import useForm from './useForm';
const MyForm = () => {
const initialValues = { username: '', password: '' };
const onSubmit = (values) => {
// Handle form submission (e.g., send data to server)
console.log('Form submitted with values:', values);
};
const { values, handleChange, handleSubmit, resetForm } = useForm(initialValues, onSubmit);
return (
<form onSubmit={handleSubmit}>
<input
type="text"
name="username"
value={values.username}
onChange={handleChange}
placeholder="Username"
/>
<input
type="password"
name="password"
value={values.password}
onChange={handleChange}
placeholder="Password"
/>
<button type="submit">Submit</button>
<button type="button" onClick={resetForm}>Reset</button>
</form>
);
};
export default MyForm;
With this custom hook, you can easily manage form state and submission logic in your React components, keeping your code organized and reusable. Adjust the hook implementation and usage according to your specific form requirements.