I have a react function component which returns a simple form . All I want to do is to clear fields' previous errors on submit and then validate fields again. surprisingly the first call of setState isn't applying changes but the others work fine .
here is the whole code :
import React from "react";
import { TextField, Button } from "@material-ui/core";
export default function EditPresonalInfo() {
const [fields, setFields] = React.useState({
username: "",
usernameHelper: "",
usernameError: false,
name: "",
nameHelper: "",
nameError: false,
});
const submitForm = (e) => {
e.preventDefault();
setFields({
...fields,
usernameError: false,
usernameHelper: "",
nameError: false,
nameHelper: "",
});
if (fields.username.length < 4) {
setFields({
...fields,
usernameHelper: "use at least 4 characters",
usernameError: true,
});
return;
}
if (fields.name.length < 2) {
setFields({
...fields,
nameHelper: "use at least 2 characters",
nameError: true,
});
return;
}
};
const handleChange = (fieldName) => (event) => {
setFields({
...fields,
[fieldName]: event.target.value,
});
};
return (
<form onSubmit={submitForm}>
<TextField
label="username"
onChange={handleChange("username")}
error={fields.usernameError}
value={fields.username}
helperText={fields.usernameHelper}
/>
<TextField
label="name"
onChange={handleChange("name")}
error={fields.nameError}
value={fields.name}
helperText={fields.nameHelper}
/>
<Button type="submit">submit</Button>
</form>
);
}
can someone help me with what I'm missing and whats wrong?