В последнее время я потратил много времени на рефакторинг проекта, основанного на Formik. Помимо обновления всей этой старой функциональности React, я также получил удовольствие от всех хороших вещей, которые поставляются с Formik 2.
Если вы имеете дело с формами (большими или маленькими) и цените свое драгоценное время жизни, я настоятельно рекомендую проверить эту библиотеку.
Чем хорош Формик?
Короче говоря, если вы еще не работали с Formik, он снимет с ваших рук следующие утомительные задачи:
- Управление состоянием при взаимодействии с компонентами формы
- Вложенные формы
- Жизненный цикл отправки
- Обработка ошибок и проверка
- Зависимые поля
Не прикасаясь к Formik за два года, я еще раз осознал, что это действительно отличная библиотека для управления формами в React без обычной головной боли. Если вы еще не читали о Formik, я настоятельно рекомендую вам пойти сюда и посмотреть вступление.
Этот не очень простой пример машинописного текста Formik
Чтобы узнать, как настроить Formik, я предлагаю вам ознакомиться с их документацией. Вместо этого я сразу перейду к более полному примеру, который полностью типизирован и использует поле даты вместо обычного ввода текста:
Это лучший пример «Hello World», который показывает, как Formik подключается к вашему состоянию, просто идентифицируя поля вашей формы.
Вдобавок к этому функция onSubmit
имитирует отправку асинхронной формы, и вы можете видеть, насколько хорошо Formik предлагает встроенную поддержку для этого. Это даст нам красивый интерфейс:
Если вы запустите этот пример, вы увидите, как все хорошо организовано без необходимости писать обработчики повсюду. Все идет нормально.
Как стилизовать эти поля?
Сейчас у этой формы нет особого дизайна. Конечно, вы всегда можете настроить таргетинг на эти поля с помощью некоторого глобального CSS, но Formik на самом деле предлагает вам простой способ стилизовать ваши собственные поля.
Используя компонент Field
сверху, вы можете просто добавить компонент в качестве опоры:
Я не дизайнер, но я справлюсь со своей задачей:
Какое удовлетворение! Теперь у нас есть централизованные стили ввода, автоматическая обработка состояния и что-то похожее на настоящую форму.
А как насчет вложенных форм Formik?
Я слышу тебя. На самом деле формы редко строятся как один компонент, а скорее разбиваются на множество по мере роста сложности.
К счастью, Formik и здесь не разочаровывает и предлагает вам три способа интеграции вложенных форм:
- Использование соглашений об именах полей в соответствии с формой вашего штата
- Передача сеттера в качестве опоры
useFormikContext()
- Я перейду к этому в следующем разделе
Давайте посмотрим на первый:
Легко, да? Все, что нам нужно было сделать, это назвать наше поле после пути атрибута в нашем состоянии, и Formik автоматически отобразит это поле!
Если вы хотите, чтобы компоненты формы оставались автономными или используете внешние библиотеки, вы можете попробовать обработчики Formik:
Использование setFieldValue
из вашего Formik props
дает вам простой и понятный способ работы с инкапсулированными компонентами.
Вот что у нас получилось:
Полная гибкость с использованием useFormikContext
Вы можете столкнуться с ситуацией, когда одна из ваших подформ становится настолько сложной, что вам потребуется дополнительная степень гибкости. Вот где useFormikContext
вступает в игру.
По сути, это весь экземпляр Formik, взятый прямо из контекста React. Вот простой редактор тегов, который живет сам по себе внутри нашей формы и даже может быть настроен с помощью отдельного ключа:
Вот и наша маленькая вольная птичка:
Очевидно, вы можете пойти дальше по этому пути, поскольку useFormikContext()
разблокирует для вас все методы и помощники жизненного цикла.
Массивы полей
И последнее, что я хочу сказать о формах: списки. Сохранение массивов элементов формы организованными и синхронизированными может легко превратиться в ситуацию с младенцем до свидания (видите, что я там делал?).
Я не буду публиковать здесь пример массивов полей, поскольку эта функциональность на самом деле очень хорошо освещена в документации Formik. Я очень рекомендую это проверить, это облегчило мне жизнь.
Привет, я Фридрих! Я менеджер и разработчик на работе, шеф-повар, музыкант, энтузиаст данных и языков дома. Вы можете найти меня в LinkedIn.