Узнайте, как проверять пользовательские компоненты ввода с помощью «формы хука реакции».
Ресурсы
Видеоурок: https://youtu.be/-scXzb-F_3k
Стартовый репозиторий Github: https://github.com/Jerga99/next-youtube-course/tree/v1.2
Полный код: https://github.com/Jerga99/next-youtube-course/commit/e31b92302b2878124dee09db32ec26d7535e611a
вступление
В этой части проверки формы мы собираемся проверить компонент даты, реализованный https://www.npmjs.com/package/react-datepicker.
Во-первых, мы добавим в форму поля startDate и endDate. Затем мы заполним их актуальными датами с помощью пакета react-datepicker.
Пожалуйста, инициализируйте свой проект из «Стартового репозитория Github» или проверьте код в «Репозиторий завершенных проектов».
Давайте начнем!
мы начинаем
Я надеюсь, что ваш проект был успешно настроен. Вы можете перейти к файлу components/shared/PortfolioForm.js.
Давайте установим datepicker: npm install — save [email protected]
После установки мы можем импортировать стили в файл _app.js.
import ’react-datepicker/dist/react-datepicker.css’;
Теперь вернитесь к PortfolioForm, импортируйте и предоставьте компонент DatePicker.
Для компонента DatePicker нам нужно предоставить функцию для получения даты в качестве реквизита onChange, а также реквизита selected, чтобы сообщить компоненту, какая дата выбрана в данный момент.
В настоящее время onChange — это просто функция оповещения о дате, а для selected установлено значение null, поэтому мы не можем изменить дату.
Давайте изменим это.
Во-первых, нам нужно зарегистрировать startDate и endDate, чтобы реагировать на форму ловушки. Мы можем сделать это так:
Мы зарегистрируем startDate и endDate с помощью функции register в useEffect, но перед этим установим наблюдатели в Дата начала и Дата окончания.
Каждый раз, когда значения startDate и endDate будут изменяться, компонент будет перерисовываться.
Теперь мы можем предоставить значения компоненту.
Это хорошо, но мы по-прежнему не можем отображать вновь выбранные даты в наших входных данных. В функции onChange нам нужно явно указать дату, чтобы реагировать на форму ловушки. Мы можем сделать это с помощью функции setValue.
Функция handleDateChange выполнит функцию setValue с двумя значениями, dateType, либо "startDate", либо "endDate" ”, и само значение даты.
Теперь мы можем успешно получить дату от компонента при отправке формы!
Давайте поговорим о валидации.
Во-первых, давайте создадим собственный валидатор, который проверяет, существует ли выбранная дата или она была в прошлом. Мы не хотим выбирать будущие дни.
Например, если сегодня 17 января 2020 года, то разрешено только 17 января и все последующие дни.
Вот функция валидатора:
Если у нас нет даты или дата находится в будущем, то дата недействительна. Чтобы указать это, мы возвращаем ложное значение.
Теперь нам нужно предоставить валидатор для регистрации в useEffect.
Теперь, когда форма отправлена, мы можем получить и отобразить ошибки.
Это не все. Мы также хотим, чтобы проверка была активной, поскольку мы меняем даты. В настоящее время мы активируем проверку только тогда, когда нажимаем кнопку отправки.
Давайте изменим handleDateChange.
Каждый раз, когда мы меняем дату, мы проверяем, находится ли дата в будущем. Если выбранная дата находится в будущем, мы установим setError, в любом другом случае вызовем clearError.
Вывод
Ладно, ребята! Это должно быть все из проверки пользовательского компонента. Теперь вы должны настроить проверку любого пользовательского компонента с помощью react-hook-form.
Для получения дополнительной информации посетите: https://academy.eincode.com
Ваше здоровье,
Филип