Вы можете немного очистить свой код ...
Вот пользовательский хук для обработки вашей формы:
import { useState } from 'react';
export const useForm = (initialValues) => {
const [values, setValues] = useState(initialValues);
return {
values,
handleChange: (e) => {
setValues({
...values,
[e.target.name]: e.target.value,
});
},
reset: () => setValues(initialValues),
};
};
Затем вы можете использовать его в своем компоненте следующим образом:
import React, { useState } from "react";
import moment from "moment";
import { useForm } from "./useForm"; //import it here
export default function Form() {
const { values, handleChange, reset } = useForm({
labor: "",
milage: "",
partprice: ""
}); //use it here
const [finalRate, setFinalRate] = useState("");
const handleSubmit = event => {
event.preventDefault();
let hourlyRate = values.labor * 80 + (values.milage * 0.085 + 7.5) + parseInt(values.partprice);
let roundedRate = Math.round(hourlyRate * 100) / 100;
setFinalRate(roundedRate);
reset();
};
return (
<div className="page">
<form id="create" onSubmit={handleSubmit}>
<input
className="form-input"
id="date"
placeholder={moment().format("dddd")}
/>
<input
className="form-input"
id="link"
name="labor"
value={values.labor}
placeholder="Enter Labor/Travel Time"
onChange={handleChange}
/>
<input
className="form-input"
id="comment"
name="milage"
value={values.milage}
placeholder="Enter Miles Traveled"
onChange={handleChange}
/>
<input
className="form-input"
id="tags"
name="partprice"
value={values.partprice}
placeholder="Enter Parts Price"
onChange={handleChange}
/>
<button className="submit">Submit</button>
</form>
<div className="finalrate">
<h1>{finalRate}</h1>
</div>
</div>
);
}
Живая демонстрация: https://stackblitz.com/edit/react-7ylsha?file=index.js