← Назад к вопросам

Использовали ли Formik

1.8 Middle🔥 131 комментариев
#Soft Skills и рабочие процессы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Опыт с Formik

Да, я использовал Formik в нескольких проектах и могу подробнее рассказать об этом опыте.

Что такое Formik

Formik — библиотека для React, которая упрощает работу с формами. Она справляется с состоянием полей, валидацией и отправкой данных.

Мой опыт

Я использовал Formik в проекте для:

  • Формы авторизации (login, password reset)
  • Формы регистрации с комплексной валидацией
  • Формы редактирования профиля с динамическим добавлением полей
  • Формы загрузки файлов с callback-ами
import { Formik, Form, Field, ErrorMessage } from 'formik';
import * as Yup from 'yup';

const validationSchema = Yup.object().shape({
  email: Yup.string()
    .email('Invalid email')
    .required('Email required'),
  password: Yup.string()
    .min(8, 'At least 8 characters')
    .required('Password required')
});

function LoginForm() {
  return (
    <Formik
      initialValues={{ email: '', password: '' }}
      validationSchema={validationSchema}
      onSubmit={async (values) => {
        await apiClient.login(values);
      }}
    >
      {({ isSubmitting, isValid }) => (
        <Form>
          <Field
            name="email"
            type="email"
            placeholder="Email"
          />
          <ErrorMessage name="email" />
          
          <Field
            name="password"
            type="password"
            placeholder="Password"
          />
          <ErrorMessage name="password" />
          
          <button 
            type="submit" 
            disabled={isSubmitting || !isValid}
          >
            Login
          </button>
        </Form>
      )}
    </Formik>
  );
}

Плюсы Formik

1. Автоматическое управление состоянием

  • Не нужно писать state для каждого поля
  • Formik хранит значения, ошибки, коснулось ли поле

2. Встроенная валидация

validationSchema={Yup.object().shape({
  field: Yup.string().required()
})}

3. Обработка form submission

onSubmit={async (values) => {
  // Formik автоматически ставит isSubmitting = true
  // Disable кнопку, показывает loading state
}}

4. Touch tracking

// Показывать ошибку только если user коснулся поля
{touched.email && errors.email && <Error />}

Минусы Formik

1. Boilerplate кода

// Много паттерн-повторяющегося кода
<Field>
  <ErrorMessage>
// Это повторяется для каждого поля

2. Performance проблемы с большими формами

  • Если форм с 100+ полями, Formik перерендеживает все (re-render all fields)
  • Решение: Field-level validation и memoization
const MemoizedField = React.memo(({name, ...props}) => (
  <Field name={name} {...props} />
));

3. Сложность с асинхронной валидацией

const validationSchema = Yup.object().shape({
  email: Yup.string()
    .test(
      'unique-email',
      'Email already exists',
      async (value) => {
        const response = await fetch(`/api/check-email?email=${value}`);
        return response.ok;
      }
    )
});

Как я это решил

1. Custom компоненты Я создал custom компоненты на базе Field/ErrorMessage, чтобы избежать boilerplate:

function FormField({ name, label, type = 'text' }) {
  return (
    <Formik.Field>
      {({ field, form }) => (
        <div>
          <label>{label}</label>
          <input {...field} type={type} />
          {form.touched[name] && form.errors[name] && (
            <span className="error">{form.errors[name]}</span>
          )}
        </div>
      )}
    </Formik.Field>
  );
}

2. React Hook Form В новых проектах я перешел на React Hook Form — он легче и быстрее:

import { useForm } from 'react-hook-form';

function Form() {
  const { register, handleSubmit, formState: { errors } } = useForm();
  
  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input {...register('email', { required: true })} />
      {errors.email && <span>Email required</span>}
    </form>
  );
}

Вывод

Когда использовать Formik:

  • Комплексные формы с множеством валидаций
  • Нужен touch tracking и комплексное состояние
  • Team уже знает Formik

Когда использовать React Hook Form:

  • Простые формы
  • Performance важен
  • Modern React (hooks-based)

Когда не использовать никакие:

  • Одноё поле (контролировать руками)
  • Native HTML form submission