Управление формами в React всё ещё частая боль. Библиотеки вроде Formik или React Hook Form решают задачу, но иногда вам нужен лёгкий, прозрачный и контролируемый подход без зависимостей. Особенно если форма небольшая, а требования простые: поля, валидация, сброс. В этой статье мы напишем универсальный кастомный хук useForm, который: Начнём с базового состояния. Форма — это объект, где ключи = имена полей, значения = их текущее содержимое. Теперь добавим обработчик изменения: Этот подход работает с любыми полями: <input>, <select>, даже кастомными компонентами. Валидация должна быть: Создадим тип для правил: Пример схемы: Теперь добавим состояние ошибок и функцию валидации: Обратите внимание: мы передаём все значения формы в правило это позволяет делать кросс-валидацию (например, «пароли должны совпадать»). Сброс должен возвращать форму в изначальное состояние, включая очистку ошибок: Если нужно сбросить к новому набору значений, можно сделать reset(values) но для простоты оста