Этап 2 из 12 · ≈ 3 ч

Композиция компонентов

Основа с Junior

children, слоты, render props и HOC — как переиспользовать интерфейс без наследования.

В React не наследуют компоненты — их составляют.

function Card({ title, actions, children }) {
  return (
    <section className="card">
      <header>{title}{actions}</header>
      {children}
    </section>
  );
}

<Card title="Корзина" actions={<ClearButton />}>
  <CartItems />
</Card>

Что важно знать

  • children и именованные «слоты» через props — основной способ строить обёртки: модальные окна, раскладки, карточки.
  • Композиция решает «проброс props через пять уровней» чаще, чем контекст.
  • Render props (<List renderItem={…}/>) и HOC (withAuth(Component)) — старые приёмы переиспользования логики; сейчас их почти везде заменили пользовательские хуки, но в старом коде и библиотеках они встречаются.
  • Составные компоненты (<Tabs><Tabs.List/><Tabs.Panel/></Tabs>) с общим контекстом — паттерн UI-библиотек.

Критерии освоения

Junior ≈ 3 ч

  • Использует children и слоты для обёрток — модальные окна, карточки, раскладки

Практика. Сделать компонент Card со слотами для заголовка, действий и содержимого.

Middle ≈ 4 ч

  • Строит составные компоненты с общим контекстом
  • Заменяет render props и HOC пользовательскими хуками

Практика. Сделать составной компонент Tabs (Tabs.List, Tabs.Tab, Tabs.Panel) с доступностью.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Как строить обёртки через children и слоты?Junior

Всё, что вложено в компонент между тегами, приходит в props.children — так делают обёртки: модальное окно, карточку, раскладку страницы, не зная, что внутри. Если мест для содержимого несколько, передают их отдельными props-слотами (header, footer, actions)…

Полный разбор
Что такое составные компоненты (compound components)?Middle

Набор компонентов, которые работают вместе и делят общее состояние через Context родителя: <Tabs>, <Tabs.List>, <Tabs.Tab>, <Tabs.Panel>. Пользователь сам собирает разметку в нужном порядке, а логика (какая вкладка активна, клавиатура, aria-атрибуты) спрятана…

Полный разбор
Почему пользовательские хуки вытеснили HOC и render props?Middle

HOC — функция, которая принимает компонент и возвращает обёрнутый с дополнительными props (withUser(Profile)). Render props — компонент вызывает функцию-проп для отрисовки (<Mouse render={pos => ...}/>). Оба приёма делили логику, но давали «ад обёрток» в…

Полный разбор
Как поделиться состоянием между соседними компонентами — что значит «поднять состояние»?Junior

Данные в React текут сверху вниз через props. Если двум соседям нужно одно состояние, его поднимают в ближайшего общего родителя: родитель хранит state, передаёт значение вниз через props и функцию изменения (колбэк) тем, кто должен его менять. Так у данных…

Полный разбор
Чем state отличается от props в React?Junior

props — входные данные от родителя, компонент их только читает. state — собственные данные компонента, меняются через setState и вызывают перерисовку. Данные текут сверху вниз; ребёнок сообщает об изменениях родителю через колбэки в props. Общее состояние…

Полный разбор
Что такое JSX и как вставлять в него выражения и фрагменты?Junior

JSX — синтаксис, который компилируется в вызовы создания элементов (<div className="a"> → jsx("div", {className: "a"})). В фигурных скобках — любое выражение JavaScript: переменная, вызов функции, тернарный оператор, map по массиву; инструкции (if, for) …

Полный разбор
Как сделать условный рендеринг в React и в чём ловушка с && и нулём?Junior

Способы: тернарный оператор {cond ? <A/> : <B/>}, логическое И {cond && <A/>}, ранний return из компонента, переменная с элементом. Ловушка &&: если слева число 0, React его выведет на страницу ({items.length && <List/>} покажет «0»). Лечится явным булевым…

Полный разбор

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

← Вся карта «React»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования