Детальный интерактивный гайд по хукам ReactJS с практическими примерами и живыми демонстрациями
- О проекте
- Возможности
- Технологии
- Быстрый старт
- Структура проекта
- Документация по хукам
- Разработка
- Тестирование
- Сборка
- Вклад в проект
- Лицензия
Learn ReactJS Hooks — это интерактивная платформа для изучения хуков React. Проект предоставляет детальную документацию, практические примеры и живые демонстрации для каждого хука React.
- 📚 Обучение: Подробное объяснение каждого хука с примерами
- 🎮 Интерактивность: Живые демонстрации и практические примеры
- 🎯 Практика: Возможность экспериментировать с кодом в реальном времени
- 📊 Прогресс: Отслеживание изученных хуков и статистика обучения
- Детальные описания каждого хука React
- Синтаксис и API с примерами использования
- Лучшие практики и типичные ошибки
- Советы и рекомендации от экспертов
- Живые демонстрации с возможностью взаимодействия
- Редактируемые блоки кода для экспериментов
- Мгновенный результат без перезагрузки страницы
- Подсветка синтаксиса для лучшего понимания
- Интерактивные упражнения для закрепления знаний
- Реальные сценарии использования хуков
- Пошаговые руководства от простого к сложному
- Система прогресса и достижений
- Статистика изучения хуков
- Отслеживание прогресса по категориям
- Рекомендации для дальнейшего изучения
- История активности пользователя
- Обмен опытом с другими разработчиками
- Обсуждение лучших практик использования хуков
- Поддержка и помощь от сообщества
- Совместное изучение и развитие навыков
- React 19.1.0 — современная библиотека для создания пользовательских интерфейсов
- TypeScript 5.8.3 — типизированный JavaScript для надежной разработки
- Vite 7.0.4 — быстрый инструмент сборки для современной веб-разработки
- React Router 6.30.1 — маршрутизация для React приложений
- Tailwind CSS 3.4.17 — utility-first CSS фреймворк
- Lucide React — красивые иконки
- React Syntax Highlighter — подсветка синтаксиса кода
- Prism.js — дополнительная подсветка синтаксиса
- ESLint 9.30.1 — статический анализ кода
- Prettier 3.2.5 — форматирование кода
- Vitest 2.1.8 — современный тестовый фреймворк
- Testing Library — утилиты для тестирования React компонентов
- PostCSS & Autoprefixer — обработка CSS
- Husky & lint-staged — Git hooks для качества кода
🚀 Основные изменения:
- 🔧 Миграция на TypeScript: Все файлы
.jsx
переименованы в.tsx
с полной типизацией - 📦 Модульная структура: Рефакторинг
hooksData.js
(1058 → 60 строк) с разделением на модули - 🎯 Оптимизация CodeBlock: Разбит на мелкие компоненты (241 → 80 строк)
- 🛡️ Error Boundaries: Добавлена обработка ошибок на уровне приложения
- ⚡ Производительность: Мемоизация, lazy loading, оптимизированные ререндеры
- 🧪 Расширенное тестирование: Покрытие увеличено с 2 до 6+ файлов тестов
🔧 Конфигурация:
- ESLint для TypeScript: Обновлена конфигурация линтера
- Prettier + Husky: Автоматическое форматирование и pre-commit хуки
- CI Pipeline: Добавлена проверка TypeScript типов
📚 Документация:
- README.md: Обновлен с TypeScript и актуальной структурой
- DEPLOYMENT.md: Упрощен, оставлен только CI
- REFACTORING_SUMMARY.md: Подробный отчет о рефакторинге
📊 Статистика улучшений:
- Размер CodeBlock: -67% (241 → 80 строк)
- Размер hooksData: -94% (1058 → 60 строк)
- Покрытие тестами: +200% (2 → 6+ файлов)
- Типизация: +100% (0% → 100%)
- CI проверки: +67% (3 → 5 этапов)
📖 Подробная информация о рефакторинге: См. REFACTORING_SUMMARY.md
- 🎨 Единообразные код блоки: Все страницы теперь используют компонент
CodeBlock
с красивой подсветкой синтаксиса - ✨ Улучшенный UI: Код блоки на страницах Examples и Practice теперь имеют градиентные стили и подсветку
- 🔧 Рефакторинг: Заменены простые
<pre>
теги на полнофункциональный компонентCodeBlock
- 📱 Адаптивность: Код блоки корректно отображаются в обеих темах (светлой и темной)
- 🎯 Консистентность: Единый стиль отображения кода во всем приложении
- 🎨 Гармоничная компоновка: Переработана сетка главной страницы для лучшего баланса элементов
- 📱 Адаптивная сетка: Первый блок (Quick Start) теперь использует 2x2 сетку вместо 3+1
- ➕ Новый раздел: Добавлен блок "Сообщество" для лучшего баланса второго раздела
- 🎯 Улучшенная отзывчивость: Обновлен CSS класс
grid-responsive
для более гибкой компоновки - 🖼️ Превью проекта: Добавлено изображение превью в README для лучшего представления проекта
- Полная документация по React Hooks
- Интерактивные примеры и демонстрации
- Система отслеживания прогресса
- Адаптивный дизайн
- Node.js версии 20.0.0 или выше
- npm версии 8.0.0 или выше
-
Клонируйте репозиторий
git clone https://github.com/FrankFMY/learn-reactjs-hooks.git cd learn-reactjs-hooks
-
Установите зависимости
npm install
-
Запустите проект в режиме разработки
npm run dev
-
Откройте браузер
http://localhost:5173
# Предварительный просмотр сборки
npm run preview
# Запуск тестов
npm test
# Запуск тестов с UI
npm run test:ui
# Проверка кода линтером
npm run lint
# Проверка TypeScript типов
npm run type-check
# Форматирование кода
npm run format
# Сборка для продакшена
npm run build
learn-reactjs-hooks/
├── public/ # Статические файлы
│ ├── vite.svg
│ └── CNAME
├── src/
│ ├── assets/ # Ресурсы (изображения, иконки)
│ │ └── react.svg
│ ├── components/ # React компоненты
│ │ ├── CodeBlock.tsx # Блок кода с подсветкой
│ │ ├── CodeBlockDemo.tsx # Демонстрация кода
│ │ ├── CodeEditor.tsx # Редактор кода
│ │ ├── CodeOutput.tsx # Вывод результата
│ │ ├── CopyButton.tsx # Кнопка копирования
│ │ ├── ErrorBoundary.tsx # Граница ошибок
│ │ ├── Header.tsx # Заголовок приложения
│ │ ├── HooksStats.tsx # Статистика хуков
│ │ ├── LanguageBadge.tsx # Бейдж языка
│ │ ├── LearningStats.tsx # Статистика обучения
│ │ ├── LiveExample.tsx # Живые примеры
│ │ ├── LoadingSpinner.tsx # Спиннер загрузки
│ │ ├── RelatedHooks.tsx # Связанные хуки
│ │ ├── Sidebar.tsx # Боковая панель
│ │ └── SyntaxHighlighter.tsx # Подсветка синтаксиса
│ ├── contexts/ # React контексты
│ │ ├── ThemeContext.tsx # Контекст темы
│ │ └── ThemeProvider.tsx # Провайдер темы
│ ├── data/ # Данные приложения
│ │ ├── categories.ts # Категории хуков
│ │ ├── difficulties.ts # Уровни сложности
│ │ ├── hooks/ # Данные о хуках
│ │ │ ├── index.ts
│ │ │ └── useState/
│ │ │ ├── examples.ts
│ │ │ ├── index.ts
│ │ │ └── metadata.ts
│ │ ├── hooksData.js # Данные о хуках (legacy)
│ │ └── hooksData.ts # Данные о хуках (TypeScript)
│ ├── hooks/ # Кастомные хуки
│ │ └── useTheme.ts # Хук для работы с темой
│ ├── pages/ # Страницы приложения
│ │ ├── ExamplesPage.tsx # Страница примеров
│ │ ├── HomePage.tsx # Главная страница
│ │ ├── HookDetailPage.tsx # Детальная страница хука
│ │ ├── HooksListPage.tsx # Список хуков
│ │ ├── PracticePage.tsx # Страница практики
│ │ └── StatsPage.tsx # Страница статистики
│ ├── styles/ # Стили
│ │ └── codeblock.css # Стили для блоков кода
│ ├── test/ # Тесты
│ │ ├── App.test.jsx # Тесты приложения
│ │ ├── CodeBlock.test.tsx # Тесты компонента CodeBlock
│ │ ├── ErrorBoundary.test.tsx # Тесты ErrorBoundary
│ │ ├── setup.js # Настройка тестов (legacy)
│ │ └── setup.ts # Настройка тестов (TypeScript)
│ ├── types/ # TypeScript типы
│ │ ├── global.d.ts # Глобальные типы
│ │ └── index.ts # Основные типы
│ ├── utils/ # Утилиты
│ ├── App.tsx # Главный компонент
│ ├── index.css # Глобальные стили
│ └── main.tsx # Точка входа
├── .github/ # GitHub Actions
│ └── workflows/
│ └── ci.yml # CI pipeline
├── eslint.config.js # Конфигурация ESLint
├── index.html # HTML шаблон
├── package.json # Зависимости и скрипты
├── postcss.config.js # Конфигурация PostCSS
├── tailwind.config.js # Конфигурация Tailwind CSS
├── tsconfig.json # Конфигурация TypeScript
└── vite.config.js # Конфигурация Vite
- Описание: Управление состоянием в функциональных компонентах
- Сложность: Начинающий
- Категория: Управление состоянием
- Примеры: Счетчик, формы, переключатели
- Описание: Выполнение побочных эффектов
- Сложность: Начинающий
- Категория: Побочные эффекты
- Примеры: Загрузка данных, подписки, таймеры
- Описание: Потребление контекста React
- Сложность: Средний
- Категория: Контекст
- Примеры: Тема приложения, глобальное состояние
- Описание: Управление сложным состоянием
- Сложность: Средний
- Категория: Управление состоянием
- Примеры: Список задач, корзина покупок
- Описание: Мемоизация функций
- Сложность: Средний
- Категория: Производительность
- Примеры: Оптимизация дочерних компонентов
- Описание: Мемоизация вычислений
- Сложность: Средний
- Категория: Производительность
- Примеры: Дорогие вычисления, фильтрация
- Описание: Ссылки на DOM элементы
- Сложность: Средний
- Категория: Ссылки
- Примеры: Фокус, измерения, таймеры
- Описание: Настройка API для родительских компонентов
- Сложность: Продвинутый
- Категория: Ссылки
- Примеры: Кастомные input компоненты
- Описание: Синхронные эффекты после DOM мутаций
- Сложность: Продвинутый
- Категория: Побочные эффекты
- Примеры: Измерения DOM, предотвращение мерцания
- Описание: Отладочная информация в DevTools
- Сложность: Продвинутый
- Категория: Отладка
- Примеры: Кастомные хуки с отладкой
-
Установите зависимости разработки
npm install
-
Запустите линтер
npm run lint
-
Проверьте TypeScript типы
npm run type-check
-
Запустите тесты
npm test
- ESLint: Строгие правила для качества кода
- Prettier: Автоматическое форматирование
- TypeScript: Строгая типизация
- Testing: Покрытие тестами всех компонентов
- Husky: Git hooks для автоматических проверок
# Создание новой ветки
git checkout -b feature/new-hook
# Добавление изменений
git add .
# Коммит с описательным сообщением
git commit -m "feat: add useCustomHook with examples"
# Пуш изменений
git push origin feature/new-hook
# Все тесты
npm test
# Тесты с UI
npm run test:ui
# Тесты в режиме watch
npm test -- --watch
# Покрытие кода
npm run test:coverage
- Unit тесты: Отдельные компоненты и хуки
- Integration тесты: Взаимодействие компонентов
- E2E тесты: Полные пользовательские сценарии (планируется)
import { render, screen } from '@testing-library/react';
import { describe, it, expect } from 'vitest';
import Counter from './Counter';
describe('Counter', () => {
it('renders counter with initial value', () => {
render(<Counter />);
expect(screen.getByText('Счетчик: 0')).toBeInTheDocument();
});
it('increments counter when button is clicked', () => {
render(<Counter />);
const button = screen.getByText('Увеличить');
button.click();
expect(screen.getByText('Счетчик: 1')).toBeInTheDocument();
});
});
# Создание оптимизированной сборки
npm run build
# Предварительный просмотр сборки
npm run preview
- Code splitting: Автоматическое разделение кода
- Tree shaking: Удаление неиспользуемого кода
- Minification: Сжатие JavaScript и CSS
- Asset optimization: Оптимизация изображений и ресурсов
- TypeScript compilation: Компиляция в оптимизированный JavaScript
# Сборка для продакшена
npm run build
# Развертывание на GitHub Pages
npm run deploy
# Загрузка на сервер
# (зависит от выбранной платформы)
Мы приветствуем вклад в развитие проекта! Вот как вы можете помочь:
- Проверьте существующие issues
- Создайте новый issue с подробным описанием
- Включите шаги для воспроизведения
- Укажите версии браузера и ОС
- Опишите предлагаемую функциональность
- Объясните, почему это полезно
- Предложите способ реализации
- Приложите примеры использования
- Форкните репозиторий
- Создайте ветку для ваших изменений
- Внесите изменения с тестами
- Запустите тесты и линтер
- Создайте Pull Request
- Добавьте данные в
src/data/hooksData.ts
- Создайте компоненты для примеров
- Напишите тесты
- Обновите документацию
- Предложите дизайн-макеты
- Улучшите доступность
- Оптимизируйте производительность
- Добавьте анимации
Этот проект распространяется под лицензией MIT. См. файл LICENSE для получения дополнительной информации.
- React Team за создание отличной библиотеки
- TypeScript Team за систему типов
- Vite Team за быстрый инструмент сборки
- Tailwind CSS за utility-first подход
- Сообщество за вклад и поддержку
- Автор: FrankFMY
- GitHub: @FrankFMY
- Email: [[email protected]]
- Issues: GitHub Issues
⭐ Если проект вам понравился, поставьте звезду на GitHub!