Участник:DILIN/ReactJS
Факультет: Информационные технологии
Пререквизиты:
Постреквизиты:
Преподаватель: DILIN
Ссылка:
Приветствую тебя, дорогой друг!
Здесь будет регулярно собираться и актуализироваться курс по ReactJS.
Также, стоит учесть, что курс будет построен с учётом того, что ученик (а так же и преподаватель) - бэкендер на Ruby, поэтому будут даваться аналогии с Rails и серверной логикой.
Вот примерный пошаговый план React от “что это вообще” до продвинутой архитектуры:
План рассчитан примерно на 45–50 дней, по 1 теме в день. Темы расположены от простого к сложному, крупные блоки разбиты.
ЭТАП 0 — Фундамент (5 дней)
[править](без этого React будет болью)
День 1 — Как работает современный фронтенд
[править]- Что такое SPA
- Как браузер исполняет JS
- Что такое VDOM
- Разница SSR vs CSR
📌 Аналогия: Rails + ERB = серверный рендеринг. React = клиент сам рендерит шаблон.
День 2 — ES6, который нужен для React
[править]- let / const
- стрелочные функции
- деструктуризация
- spread оператор
- map / filter / reduce
📌 Аналогия: это твой Ruby Enumerable, только на JS.
День 3 — Модули и структура проекта
[править]- import / export
- структура React проекта
- что такое bundler (vite / webpack)
📌 Это как Gemfile + autoload в Rails.
День 4 — Что такое компонент
[править]- Функциональный компонент
- JSX
- Почему JSX не шаблон, а синтаксический сахар
📌 Компонент = View partial в Rails, но с логикой внутри.
День 5 — Props
[править]- Передача данных
- Однонаправленный поток данных
- props.children
📌 Это как передать переменную в partial: `render partial:, locals: {}`
ЭТАП 1 — Базовые хуки (10 дней)
[править]День 6 — useState (база)
[править]- Локальное состояние
- setState
- Асинхронность обновления
📌 Это твой instance variable в контроллере, но живущий в UI.
День 7 — useState глубже
[править]- Объекты в state
- Иммутабельность
- Почему нельзя мутировать
📌 В Ruby можно мутировать, в React — нельзя, иначе ререндер не сработает.
День 8 — Ререндер
[править]- Когда происходит
- Почему происходит
- Что триггерит
День 9 — useEffect (база)
[править]- Жизненный цикл
- dependency array
📌 Это как before_action / after_commit, но для UI.
День 10 — useEffect продвинуто
[править]- Очистка
- Подписки
- Fetch внутри effect
День 11 — Асинхронность
[править]- fetch
- async/await
- обработка ошибок
📌 Это твой Faraday / HTTParty.
День 12 — Controlled inputs
[править]- Формы
- value / onChange
📌 Rails form_with, только вручную.
День 13 — Подъем состояния (lifting state up)
[править]📌 Как если бы несколько partial зависели от одного instance variable.
День 14 — Условный рендеринг
[править]День 15 — Списки и key
[править]📌 key = primary key для React reconciliation.
ЭТАП 2 — Архитектура и композиция (8 дней)
[править]День 16 — Композиция компонентов
[править]День 17 — Custom Hooks
[править]- Зачем
- Как писать
📌 Это как вынести логику в concern.
День 18 — Context API (база)
[править]📌 Это как глобальная переменная, но контролируемая.
День 19 — Context глубже
[править]- Когда НЕ использовать
- Проблемы производительности
День 20 — useReducer
[править]📌 Это мини Redux внутри компонента.
День 21 — React DevTools
[править]- Профилирование
- Debug ререндеров
День 22 — React.memo
[править]День 23 — useCallback и useMemo
[править]📌 Оптимизация вычислений, чтобы не было лишних ререндеров.
ЭТАП 3 — Роутинг и структура приложения (5 дней)
[править]День 24 — React Router (база)
[править]📌 Это твой routes.rb, только в браузере.
День 25 — Параметры маршрутов
[править]День 26 — Навигация программно
[править]День 27 — Layout маршруты
[править]День 28 — Защищенные роуты
[править]📌 Аналог before_action :authenticate_user
ЭТАП 4 — Работа с сервером (5 дней)
[править]День 29 — REST на фронте
[править]День 30 — Axios vs fetch
[править]День 31 — Обработка загрузки и ошибок
[править]День 32 — Кэширование данных
[править]День 33 — React Query (TanStack Query)
[править]📌 Это ActiveRecord + кэш + автообновление.
ЭТАП 5 — Глобальный state management (8 дней)
[править]День 34 — Проблема глобального состояния
[править]День 35 — Redux (концепция)
[править]📌 Это centralized store, как глобальный singleton.
День 36 — Redux Toolkit
[править]День 37 — Async в Redux
[править]День 38 — Middleware
[править]День 39 — Redux Saga (концепция)
[править]📌 Это Sidekiq для фронта.
День 40 — Saga глубже
[править]- takeEvery
- call
- put
День 41 — Когда НЕ нужен Redux
[править]ЭТАП 6 — Продвинутые темы (7 дней)
[править]День 42 — Suspense
[править]День 43 — Lazy loading
[править]День 44 — Error Boundaries
[править]День 45 — Concurrent rendering
[править]День 46 — SSR и Next.js (база)
[править]📌 Это возвращение к Rails-подходу, но гибридному.
День 47 — Оптимизация производительности
[править]День 48 — Архитектурные подходы
[править]- FSD
- Feature-based
- Atomic design
ЭТАП 7 — Практика (обязательно)
[править]День 49 — Маленький CRUD проект
[править](список задач)
День 50 — Архитектурный рефакторинг
[править]Как тебе учиться?
[править]Каждый день:
- Теория (1–2 часа)
- Мини-практика
- Написать руками без копирования
- Ответить себе:
- какую проблему решает эта технология?
- когда её НЕ использовать?
Ruby-бэкендеру
[править]Твоя главная проблема будет:
- React — декларативный
- Ты привык к императивной логике
- Ты хочешь "контролировать", а React говорит: "опиши состояние"
Нужно перестроить мышление:
UI = функция от состояния
Как в Rails:
render json: user
В React:
return <User data={user} />