Skip to content

Детальный интерактивный гайд по хукам ReactJS с практическими примерами и живыми демонстрациями

License

Notifications You must be signed in to change notification settings

FrankFMY/learn-reactjs-hooks

Repository files navigation

🎣 Learn ReactJS Hooks

React TypeScript Vite Tailwind CSS License Tests Version

Детальный интерактивный гайд по хукам ReactJS с практическими примерами и живыми демонстрациями

Preview

📋 Содержание

🎯 О проекте

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 для качества кода

📝 Последние изменения

v2.1.2 - Полная миграция на TypeScript и рефакторинг архитектуры

🚀 Основные изменения:

  • 🔧 Миграция на 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

v1.2.0 - Унификация код блоков

  • 🎨 Единообразные код блоки: Все страницы теперь используют компонент CodeBlock с красивой подсветкой синтаксиса
  • ✨ Улучшенный UI: Код блоки на страницах Examples и Practice теперь имеют градиентные стили и подсветку
  • 🔧 Рефакторинг: Заменены простые <pre> теги на полнофункциональный компонент CodeBlock
  • 📱 Адаптивность: Код блоки корректно отображаются в обеих темах (светлой и темной)
  • 🎯 Консистентность: Единый стиль отображения кода во всем приложении

v1.1.0 - Улучшение UI/UX

  • 🎨 Гармоничная компоновка: Переработана сетка главной страницы для лучшего баланса элементов
  • 📱 Адаптивная сетка: Первый блок (Quick Start) теперь использует 2x2 сетку вместо 3+1
  • ➕ Новый раздел: Добавлен блок "Сообщество" для лучшего баланса второго раздела
  • 🎯 Улучшенная отзывчивость: Обновлен CSS класс grid-responsive для более гибкой компоновки
  • 🖼️ Превью проекта: Добавлено изображение превью в README для лучшего представления проекта

v1.0.0 - Первоначальный релиз

  • Полная документация по React Hooks
  • Интерактивные примеры и демонстрации
  • Система отслеживания прогресса
  • Адаптивный дизайн

🚀 Быстрый старт

Предварительные требования

  • Node.js версии 20.0.0 или выше
  • npm версии 8.0.0 или выше

Установка

  1. Клонируйте репозиторий

    git clone https://github.com/FrankFMY/learn-reactjs-hooks.git
    cd learn-reactjs-hooks
  2. Установите зависимости

    npm install
  3. Запустите проект в режиме разработки

    npm run dev
  4. Откройте браузер

    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

📚 Документация по хукам

🎯 Основные хуки

useState

  • Описание: Управление состоянием в функциональных компонентах
  • Сложность: Начинающий
  • Категория: Управление состоянием
  • Примеры: Счетчик, формы, переключатели

useEffect

  • Описание: Выполнение побочных эффектов
  • Сложность: Начинающий
  • Категория: Побочные эффекты
  • Примеры: Загрузка данных, подписки, таймеры

useContext

  • Описание: Потребление контекста React
  • Сложность: Средний
  • Категория: Контекст
  • Примеры: Тема приложения, глобальное состояние

🔧 Дополнительные хуки

useReducer

  • Описание: Управление сложным состоянием
  • Сложность: Средний
  • Категория: Управление состоянием
  • Примеры: Список задач, корзина покупок

useCallback

  • Описание: Мемоизация функций
  • Сложность: Средний
  • Категория: Производительность
  • Примеры: Оптимизация дочерних компонентов

useMemo

  • Описание: Мемоизация вычислений
  • Сложность: Средний
  • Категория: Производительность
  • Примеры: Дорогие вычисления, фильтрация

useRef

  • Описание: Ссылки на DOM элементы
  • Сложность: Средний
  • Категория: Ссылки
  • Примеры: Фокус, измерения, таймеры

🚀 Продвинутые хуки

useImperativeHandle

  • Описание: Настройка API для родительских компонентов
  • Сложность: Продвинутый
  • Категория: Ссылки
  • Примеры: Кастомные input компоненты

useLayoutEffect

  • Описание: Синхронные эффекты после DOM мутаций
  • Сложность: Продвинутый
  • Категория: Побочные эффекты
  • Примеры: Измерения DOM, предотвращение мерцания

useDebugValue

  • Описание: Отладочная информация в DevTools
  • Сложность: Продвинутый
  • Категория: Отладка
  • Примеры: Кастомные хуки с отладкой

👨‍💻 Разработка

Настройка окружения

  1. Установите зависимости разработки

    npm install
  2. Запустите линтер

    npm run lint
  3. Проверьте TypeScript типы

    npm run type-check
  4. Запустите тесты

    npm test

Стандарты кода

  • ESLint: Строгие правила для качества кода
  • Prettier: Автоматическое форматирование
  • TypeScript: Строгая типизация
  • Testing: Покрытие тестами всех компонентов
  • Husky: Git hooks для автоматических проверок

Git workflow

# Создание новой ветки
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

# Загрузка на сервер
# (зависит от выбранной платформы)

🤝 Вклад в проект

Мы приветствуем вклад в развитие проекта! Вот как вы можете помочь:

🐛 Сообщение об ошибках

  1. Проверьте существующие issues
  2. Создайте новый issue с подробным описанием
  3. Включите шаги для воспроизведения
  4. Укажите версии браузера и ОС

💡 Предложения улучшений

  1. Опишите предлагаемую функциональность
  2. Объясните, почему это полезно
  3. Предложите способ реализации
  4. Приложите примеры использования

🔧 Разработка

  1. Форкните репозиторий
  2. Создайте ветку для ваших изменений
  3. Внесите изменения с тестами
  4. Запустите тесты и линтер
  5. Создайте Pull Request

📝 Добавление новых хуков

  1. Добавьте данные в src/data/hooksData.ts
  2. Создайте компоненты для примеров
  3. Напишите тесты
  4. Обновите документацию

🎨 Улучшение UI/UX

  1. Предложите дизайн-макеты
  2. Улучшите доступность
  3. Оптимизируйте производительность
  4. Добавьте анимации

📄 Лицензия

Этот проект распространяется под лицензией MIT. См. файл LICENSE для получения дополнительной информации.

🙏 Благодарности

  • React Team за создание отличной библиотеки
  • TypeScript Team за систему типов
  • Vite Team за быстрый инструмент сборки
  • Tailwind CSS за utility-first подход
  • Сообщество за вклад и поддержку

📞 Контакты


Если проект вам понравился, поставьте звезду на GitHub!

About

Детальный интерактивный гайд по хукам ReactJS с практическими примерами и живыми демонстрациями

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published