I am trying to keep track of multiple states (error handling in this instance), but for reasons unknown at this stage (lack of understanding I think) I only seem able to keep the state of the last error function call:
export const SignUp = () => {
const [errors, setErrors] = useState({});
const validateFirstName = () => {
if (formData.firstName === undefined) {
setErrors(prevState => ({
...prevState.firstName,
firstName: 'First Name is required',
}));
return false;
} else if (formData.firstName.length < 3) {
setErrors(prevState => ({
...prevState.firstName,
firstName: 'First Name is too short',
}));
return false;
}
return true;
};
const validateLastName = () => {
if (formData.lastName === undefined) {
setErrors(prevState => ({
...prevState.lastName,
lastName: 'Last Name is required',
}));
return false;
} else if (formData.lastName.length < 1) {
setErrors(prevState => ({
...prevState.lastName,
lastName: 'Last Name is too short',
}));
return false;
}
return true;
};
const formSubmitHandler = e => {
e.preventDefault();
validateFirstName();
validateLastName();
};
}
So in my formSubmitHandler
I call each method in turn. Is this wrong? Do they need to be async
for example? Or does the issue lie within my setError
function? Am I not setting the updated state correctly?
When I log out errors
I only ever see lastName
:
{"errors": {"lastName": "Last Name is required"}}
What can I try to resolve this?