Here I've used useState hook in React to handle change in input field of form, but
I've repeated same code multiple times and I want to shorten it. Is there any possible way to handle multiple changes through single state and give output in object?
import React, { useState } from "react";
const [enteredTitle, setEnteredTitle] = useState("");
const [enteredPrice, setEnteredPrice] = useState("");
const [enteredDate, setEnteredDate] = useState("");
const titleChangeHandler = (e) => {
setEnteredTitle(e.target.value);
};
const priceChangeHandler = (e) => {
setEnteredPrice(e.target.value);enter code here
};
const DateChangeHandler = (e) => {
setEnteredDate(e.target.value);
};
const handleSubmit = (e) => {
e.preventDefault();
const expenseData = {
title: enteredTitle,
price: enteredPrice,
date: new Date(enteredDate),
};
props.newExpense(expenseData);
setEnteredTitle("");
setEnteredPrice("");
setEnteredDate("");
};
return (
<form onSubmit={handleSubmit}>
<div className="new-expense__controls">
<div className="new-expense__control">
<label htmlFor="">Title</label>
<input
onChange={titleChangeHandler}
type="text"
name="title"
value={enteredTitle}
/>
</div>
<div className="new-expense__control">
<label htmlFor="">Amount</label>
<input
onChange={priceChangeHandler}
type="number"
name="price"
value={enteredPrice}
min="0.01"
step="0.01"
/>
</div>
<div className="new-expense__control">
<label htmlFor="">Date</label>
<input
onChange={DateChangeHandler}
type="date"
name="date"
value={enteredDate}
/>
</div>
</div>
<div className="new-expense__actions">
<button type="submit">Submit</button>
</div>
</form>
);
};
export default ExpenseForm;