Formik - это библиотека, которая упрощает обработку форм в приложениях React.

В этой статье мы рассмотрим, как обрабатывать входные данные формы с помощью Formik.

Установка

Мы можем установить Formik, запустив:

npm install formik --save

or

yarn add formik

Основное использование

Мы можем использовать это, написав:

import React from "react";
import { Formik } from "formik";
export default function App() {
  return (
    <div className="App">
      <Formik
        initialValues={{ email: "", password: "" }}
        validate={(values) => {
          const errors = {};
          if (!values.email) {
            errors.email = "Required";
          } else if (
            !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(values.email)
          ) {
            errors.email = "Invalid email address";
          }
          return errors;
        }}
        onSubmit={(values, { setSubmitting }) => {
          setTimeout(() => {
            alert(JSON.stringify(values, null, 2));
            setSubmitting(false);
          }, 400);
        }}
      >
        {({
          values,
          errors,
          touched,
          handleChange,
          handleBlur,
          handleSubmit,
          isSubmitting
        }) => (
          <form onSubmit={handleSubmit}>
            <input
              type="email"
              name="email"
              onChange={handleChange}
              onBlur={handleBlur}
              value={values.email}
            />
            {errors.email && touched.email && errors.email}
            <input
              type="password"
              name="password"
              onChange={handleChange}
              onBlur={handleBlur}
              value={values.password}
            />
            {errors.password && touched.password && errors.password}
            <button type="submit" disabled={isSubmitting}>
              Submit
            </button>
          </form>
        )}
      </Formik>
    </div>
  );
}

initialValues имеет начальные значения.

validate - это функция, которая позволяет нам проверять введенные значения формы.

values имеет значения, которые мы ввели.

Устанавливаем объект errors с ошибками для полей.

onSubmit имеет функцию, которая имеет введенные значения в объекте values.

setSubmitting - это функция, которую мы можем запустить, чтобы установить состояние отправки формы.

В элементе form мы устанавливаем форму onSubmit на функцию handleSubmit из параметра свойства рендеринга для запуска onSubmit, если это значение.

values.email и values.password имеют значение формы для каждого поля.

handleChange позволяет нам включать введенные значения в объект values в различных местах.

onBlur имеет метод handleBlur для обработки событий размытия.

touched имеет состояние касания для каждого поля формы.

isSubmitting имеет состояние отправки формы.

Мы можем упростить код с помощью компонентов Form, Field и ErrorMessage.

Например, мы можем сократить приведенный выше код до:

import React from "react";
import { ErrorMessage, Field, Form, Formik } from "formik";
export default function App() {
  return (
    <div className="App">
      <Formik
        initialValues={{ email: "", password: "" }}
        validate={(values) => {
          const errors = {};
          if (!values.email) {
            errors.email = "Required";
          } else if (
            !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(values.email)
          ) {
            errors.email = "Invalid email address";
          }
          return errors;
        }}
        onSubmit={(values, { setSubmitting }) => {
          setTimeout(() => {
            alert(JSON.stringify(values, null, 2));
            setSubmitting(false);
          }, 400);
        }}
      >
        {({ isSubmitting }) => (
          <Form>
            <Field type="email" name="email" />
            <ErrorMessage name="email" component="div" />
            <Field type="password" name="password" />
            <ErrorMessage name="password" component="div" />
            <button type="submit" disabled={isSubmitting}>
              Submit
            </button>
          </Form>
        )}
      </Formik>
    </div>
  );
}

Компоненты заменяют элементы ввода формы и текст ошибки.

Пока значения name совпадают между Field и ErrorMessage, мы будем видеть одни и те же значения.

Заключение

Мы можем легко обрабатывать формы в React с Formik.

Понравилась эта статья? Если да, то получите больше похожего контента, подписавшись на наш канал YouTube!

Больше контента на plainenglish.io