У меня есть компонент функции реакции, который возвращает простую форму. Все, что я хочу сделать, это очистить предыдущие ошибки полей при отправке, а затем снова проверить поля. удивительно, что первый вызов setState не применяет изменений, но остальные работают нормально.
вот весь код:
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>
);
}
может кто-нибудь помочь мне с тем, что мне не хватает и что не так?
fields
не обновляется непосредственно в начале вашей функцииsubmitForm
, он будет обновлен в конце жизненного цикла. Поэтому, когда вы позже будете использоватьfields
в функции, оно останется «исходным» значением. - person Nico_   schedule 10.09.2020fields
, вы увидите, что он не обновляется (до следующего рендера). - person Nico_   schedule 10.09.2020