Как в Next.js с использованием React Hook Form обрабатывать запрос к внешнему API при валидации формы?

Как настроить валидацию на стороне сервера для формы авторизации с использованием React Hook Form в Next.js, чтобы проверить правильность e-mail и пароля и вывести сообщение об ошибке, если они неправильные?
Изображение к вопросу
  • 15 декабря 2023 г. 14:17
Ответы на вопрос 2
Для обработки запроса к внешнему API при валидации формы с использованием React Hook Form в Next.js вы можете использовать метод `handleSubmit` из React Hook Form. Внутри этого метода вы можете отправить данные формы на сервер и получить ответ от API.

Вот пример кода:

```jsx
import { useForm } from "react-hook-form";

export default function MyForm() {
  const { register, handleSubmit, errors } = useForm();

  const onSubmit = async (data) => {
    try {
      // Отправляем запрос к внешнему API
      const response = await fetch("URL_API", {
        method: "POST",
        body: JSON.stringify(data),
        headers: {
          "Content-Type": "application/json",
        },
      });
      
      // Обрабатываем ответ от API
      const result = await response.json();

      // Выводим результат полученный от API
      console.log(result);
    } catch (error) {
      console.log(error);
    }
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input
        type="text"
        name="email"
        ref={register({ required: true, pattern: /^\S+@\S+$/i })}
      />
      {errors.email && <p>Введите корректный email</p>}

      <input
        type="password"
        name="password"
        ref={register({ required: true })}
      />
      {errors.password && <p>Введите пароль</p>}

      <button type="submit">Отправить</button>
    </form>
  );
}
```

Что касается настройки валидации на стороне сервера для формы авторизации с использованием React Hook Form в Next.js, вы можете использовать компонент `yup` для создания схемы валидации. Вот пример кода:

```jsx
import { useForm } from "react-hook-form";
import * as yup from "yup";

// Создаем схему валидации
const schema = yup.object().shape({
  email: yup.string().email().required(),
  password: yup.string().required(),
});

export default function MyForm() {
  const { register, handleSubmit, errors } = useForm({
    validationSchema: schema, // Подключаем схему валидации к форме
  });

  const onSubmit = (data) => {
    console.log(data);
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input type="text" name="email" ref={register} />
      {errors.email && <p>Введите корректный email</p>}

      <input type="password" name="password" ref={register} />
      {errors.password && <p>Введите пароль</p>}

      <button type="submit">Отправить</button>
    </form>
  );
}
```

В этом примере мы использовали пакет `yup`, чтобы создать схему валидации, которая определяет требования к правильному e-mail и паролю. Компонент `yup` связан с React Hook Form через опцию `validationSchema`, что позволяет автоматически проверять введенные данные формы с учетом схемы валидации.
react-hook-from, хук useForm , возращает метод , его можно использовать для установки кастомной ошибки. 

Статус ошибки ни как не скрыть, это контролируется на уровне браузера, пример .
Похожие вопросы