@vladislav3101

Функция useState возвращает старое значение, как можно исправить?

const SignUpContainer = () => {
  const [values, setValues] = useState({
    email: '',
    login: '',
    password: '',
    password2: '',
  });

  const [errors, setErrors] = useState({});

  const handleChange = (e) => {
    const { name, value } = e.target;
    setValues({ ...values, [name]: value });
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    setErrors(validateSignUp(values));
    if (Object.keys(errors).length === 0) {
      console.log('Ошибок нет');
    } else {
      console.log('Ошибки есть');
    }
  };

  return (
    <FormSignUp
      handleChange={handleChange}
      handleSubmit={handleSubmit}
      values={values}
      errors={errors}
    />
  );
};

export default SignUpContainer;

Функция validateSignUp возвращает объект ошибок, когда я отправляю форму state errors возвращается старый. При отправки формы в 2-ой раз приходит как раз state новый. Как можно решить проблему?
  • Вопрос задан
  • 654 просмотра
Пригласить эксперта
Ответы на вопрос 1
@vladislav3101 Автор вопроса
const SignUpContainer = () => {
  const [values, setValues] = useState({
    email: '',
    login: '',
    password: '',
    password2: '',
  });

  const [errors, setErrors] = useState({});

  const handleChange = (e) => {
    const { name, value } = e.target;
    setValues({ ...values, [name]: value });
  };

   const isValid = () => {
    const errors = validateSignUp(values);
    if (Object.keys(errors).length > 0) {
      setErrors(errors);
      return false;
    }
    return true;
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    if (isValid()) {
      setErrors({});
      console.log('Ошибок нет');
    } else {
      console.log('Ошибки есть');
    }
  };

  return (
    <FormSignUp
      handleChange={handleChange}
      handleSubmit={handleSubmit}
      values={values}
      errors={errors}
    />
  );
};

export default SignUpContainer;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы