PassFront
  1. PassFront
  2. База знаний
  3. Хуки

Быстрее работает React Hook Form или Formik?

Хуки

React Hook Form быстрее — и это следствие архитектуры: RHF строит формы на неуправляемых полях с точечными подписками, Formik — на управляемых с состоянием формы в React.

Почему RHF быстрее

const { register, handleSubmit, formState } = useForm();

<input {...register('email')} />  // поле регистрируется через ref
  • Значения живут в DOM и внутреннем сторе RHF, не в React-state: ввод символа не вызывает ререндер ни поля, ни формы.
  • Подписки изолированы: formState.errors, watch('field') перерисовывают только подписанные компоненты.
  • Итог: форма на 50 полей при вводе не перерисовывается вовсе (если сами не подписались на значение).

Почему Formik медленнее

<Formik initialValues={...} onSubmit={...}>
  {({ values, handleChange }) => (
    <input name="email" value={values.email} onChange={handleChange} />
  )}
</Formik>
  • Все значения — в state компонента Formik: каждое нажатие клавиши обновляет state и перерисовывает форму целиком (все поля, вся валидация по умолчанию).
  • Смягчается точечными оптимизациями (FastField, мемоизация), но это борьба с архитектурой.

Не только скорость

  • RHF: меньше бойлерплейта, resolver'ы для схем (Zod/Yup), активная разработка.
  • Formik: привычнее «управляемая» модель, но проект практически не развивается.
  • Для маленькой формы (логин, 3 поля) разница неощутима — оба справятся.

Коротко для собеседования

RHF быстрее архитектурно: неуправляемые поля через ref, значения вне React-state, точечные подписки — ноль ререндеров при вводе. Formik держит значения в state и перерисовывает форму на каждое нажатие. На больших формах разница драматична; сегодня дефолт индустрии — React Hook Form (+ Zod).

Другие вопросы раздела