Перейти к содержанию

Участник:DILIN/ReactJS

Материал из Викиверситета
Курс «Участник: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. Теория (1–2 часа)
  2. Мини-практика
  3. Написать руками без копирования
  4. Ответить себе:
    1. какую проблему решает эта технология?
    2. когда её НЕ использовать?

Ruby-бэкендеру

[править]

Твоя главная проблема будет:

  • React — декларативный
  • Ты привык к императивной логике
  • Ты хочешь "контролировать", а React говорит: "опиши состояние"

Нужно перестроить мышление:

UI = функция от состояния

Как в Rails:

render json: user

В React:

return <User data={user} />