Интерактивный курс по изучению React Hook Form с использованием TypeScript, Zod и Yup.
Пошаговые упражнения от простых к сложным. Каждый уровень включает теорию, примеры кода и задания для самостоятельного решения. Интерфейс поддерживает 🇷🇺 русский и 🇬🇧 английский языки.
npm install
npm run devОткройте браузер по адресу http://localhost:5173
Курс разделён на два каталога:
-
🖊️
exercises/— здесь вы пишете код:TaskX_X.tsx— файлы заданий с TODOCheat.tsx— образец решения для сверки
-
📚
src/exercises/— теория и описания заданий:README.md— подробная теорияtask-X.X.md— описание каждого заданияSolution.tsx— решение, интегрированное в приложение
- 📖 Прочитайте теорию — блок «Теория» на странице уровня
- 🔍 Изучите задание — блок «Задание X.X» под формой
- ✏️ Откройте
exercises/XX-level/TaskX_X.tsxи следуйте TODO - 🌐 Проверьте результат в браузере
- 💡 Сверьтесь с
Cheat.tsxесли застряли
- 0.1: Первая форма
- 0.2: Вывод данных на страницу
- 1.1: Форма регистрации с разными типами полей
- 1.2: Отслеживание значений с watch
- 1.3: setValue и getValues
- 1.4: formState — ошибки и валидность
- 2.1: Built-in валидация (required, minLength, maxLength)
- 2.2: Pattern валидация (email, phone, password)
- 2.3: Custom валидация с validate
- 2.4: Cross-field валидация
- 3.1: Базовая валидация с Zod
- 3.2: Валидация с Yup
- 3.3: Сложные схемы (объекты, массивы, enum)
- 3.4: Кастомные сообщения и refine
- 3.5: Сравнение Zod vs Yup
- 3.6: superRefine и discriminatedUnion
- 4.1: Controller для кастомных компонентов
- 4.2: Radio и Select
- 4.3: Checkbox
- 4.4: File Upload
- 4.5: Дата и время
- 5.1: useFieldArray (add/remove)
- 5.2: Условные поля
- 5.3: Зависимые поля
- 5.4: Wizard (multi-step форма)
- 6.1: Dirty/Touched states
- 6.2: Reset и default values
- 6.3: Focus management
- 6.4: Accessibility (ARIA)
- 6.5: Performance оптимизация
- 6.6: setFocus, resetField и getFieldState
- 7.1: Async валидация
- 7.2: Загрузка данных (edit mode)
- 7.3: Submit с loading/error
- 7.4: Debounce для автосохранения
- 7.5: Async defaultValues и isLoading
- 8.1: Интеграция с UI-библиотекой
- 8.2: Кастомные хуки
- 8.3: FormContext
- 8.4: localStorage Persistence
- 8.5: Финальный проект
- 8.6: useFormState и тестирование
exercises/ # ✏️ Файлы для работы студента
├── 00-setup/ # TaskX_X.tsx + Cheat.tsx
├── ...
└── 08-advanced/
src/
├── exercises/ # 📚 Теория, задания, решения
│ ├── 00-setup/ # README.md, task-0.1.md, Solution.tsx
│ ├── ...
│ └── 08-advanced/
├── components/ # 🧩 UI-компоненты приложения
├── hooks/ # 🪝 Хуки (тема, язык, прогресс и др.)
├── translations/ # 🌍 Переводы интерфейса
├── App.tsx # 🏠 Главное приложение с роутингом
└── main.tsx # 🚪 Точка входа
npm run dev # 🚀 Запуск dev-сервера
npm run build # 📦 Сборка проекта
npm run lint # 🔍 Линтинг
npm run format # 💅 Форматирование кода
npx tsc --noEmit # 🔬 Проверка типов- ⚛️ React 18.3
- 🔷 TypeScript 5.6
- 📝 React Hook Form 7.54
- 💎 Zod 3.24
- 🧪 Yup 1.6
- ⚡ Vite 8.0
- 📝 React Hook Form
- 💎 Zod
- 🧪 Yup
- ⚛️ React
- 🔷 TypeScript
MIT
Interactive course to learn React Hook Form using TypeScript, Zod and Yup.
Step-by-step exercises from simple to complex. Each level includes theory, code examples, and tasks for independent solving. The interface supports 🇷🇺 Russian and 🇬🇧 English.
npm install
npm run devOpen browser at http://localhost:5173
The course is split into two directories:
-
🖊️
exercises/— where you write code:TaskX_X.tsx— task files with TODO commentsCheat.tsx— reference solution for checking
-
📚
src/exercises/— theory and task descriptions:README.md— detailed theorytask-X.X.md— description of each taskSolution.tsx— solution integrated into the app
- 📖 Read the theory — "Theory" block on the level page
- 🔍 Study the task — "Task X.X" block below the form
- ✏️ Open
exercises/XX-level/TaskX_X.tsxand follow TODOs - 🌐 Check the result in the browser
- 💡 Compare with
Cheat.tsxif stuck
- 0.1: First form
- 0.2: Displaying data on the page
- 1.1: Registration form with different field types
- 1.2: Tracking values with watch
- 1.3: setValue and getValues
- 1.4: formState — errors and validity
- 2.1: Built-in validation (required, minLength, maxLength)
- 2.2: Pattern validation (email, phone, password)
- 2.3: Custom validation with validate
- 2.4: Cross-field validation
- 3.1: Basic Zod validation
- 3.2: Yup validation
- 3.3: Complex schemas (objects, arrays, enum)
- 3.4: Custom messages and refine
- 3.5: Zod vs Yup comparison
- 3.6: superRefine and discriminatedUnion
- 4.1: Controller for custom components
- 4.2: Radio and Select
- 4.3: Checkbox
- 4.4: File Upload
- 4.5: Date and time
- 5.1: useFieldArray (add/remove)
- 5.2: Conditional fields
- 5.3: Dependent fields
- 5.4: Wizard (multi-step form)
- 6.1: Dirty/Touched states
- 6.2: Reset and default values
- 6.3: Focus management
- 6.4: Accessibility (ARIA)
- 6.5: Performance optimization
- 6.6: setFocus, resetField and getFieldState
- 7.1: Async validation
- 7.2: Data loading (edit mode)
- 7.3: Submit with loading/error
- 7.4: Debounce for auto-save
- 7.5: Async defaultValues and isLoading
- 8.1: UI library integration
- 8.2: Custom hooks
- 8.3: FormContext
- 8.4: localStorage Persistence
- 8.5: Final project
- 8.6: useFormState and testing
exercises/ # ✏️ Student work files
├── 00-setup/ # TaskX_X.tsx + Cheat.tsx
├── ...
└── 08-advanced/
src/
├── exercises/ # 📚 Theory, tasks, solutions
│ ├── 00-setup/ # README.md, task-0.1.md, Solution.tsx
│ ├── ...
│ └── 08-advanced/
├── components/ # 🧩 UI components
├── hooks/ # 🪝 Hooks (theme, language, progress, etc.)
├── translations/ # 🌍 Interface translations
├── App.tsx # 🏠 Main app with routing
└── main.tsx # 🚪 Entry point
npm run dev # 🚀 Start dev server
npm run build # 📦 Build project
npm run lint # 🔍 Linting
npm run format # 💅 Code formatting
npx tsc --noEmit # 🔬 Type checking- ⚛️ React 18.3
- 🔷 TypeScript 5.6
- 📝 React Hook Form 7.54
- 💎 Zod 3.24
- 🧪 Yup 1.6
- ⚡ Vite 8.0
- 📝 React Hook Form
- 💎 Zod
- 🧪 Yup
- ⚛️ React
- 🔷 TypeScript
MIT