PassFront
  1. PassFront
  2. База знаний
  3. Компоненты

Сравни подходы к написанию переиспользуемых компонентов и объясни, когда какой подход выбрать.

Компоненты

Переиспользуемый компонент можно спроектировать по-разному; выбор — компромисс между простотой API, гибкостью и контролем над разметкой.

Props-конфигурация

<Select options={opts} placeholder="Выбор" size="md" onChange={fn} />
  • Плюсы: простой и явный API, легко типизировать, быстрый старт.
  • Минусы: «пропс-взрыв» при росте требований (optionIcon, renderBadge, emptyText…); нестандартный кейс не собрать.
  • Выбирать: простые компоненты с ограниченным числом вариаций (Button, Input, Badge).

Композиция через children и слоты

<Card header={<Title/>} footer={<Actions/>}>{body}</Card>
  • Плюсы: разметку определяет потребитель; убирает prop drilling и лишние рендеры.
  • Минусы: контракт менее очевиден, чем список props.
  • Выбирать: контейнеры, layout'ы, обёртки.

Составные компоненты (compound)

<Tabs value={tab} onChange={setTab}>
  <Tabs.List><Tabs.Trigger value="a">A</Tabs.Trigger></Tabs.List>
  <Tabs.Panel value="a">…</Tabs.Panel>
</Tabs>
  • Плюсы: гибкая структура при общей логике через внутренний контекст; так устроены Radix/Headless UI.
  • Минусы: больше кода, потребителю нужно знать структуру.
  • Выбирать: сложные виджеты с несколькими частями (Select, Tabs, Accordion, Modal).

Headless (хук/логика без разметки)

const table = useReactTable(config); // вёрстка полностью ваша
  • Плюсы: максимум контроля над DOM и стилями, переиспользование логики между разными UI.
  • Минусы: разметку пишете сами.
  • Выбирать: сложная логика + собственная дизайн-система (таблицы, формы, комбобоксы).

HOC

Устаревший способ расширения; уместен, когда нужно обернуть чужой компонент или подменить рендер (ErrorBoundary, memo).

Коротко для собеседования

Простой компонент — props-конфигурация; контейнеры и layout — композиция children/слотов; сложный виджет с частями — compound-компоненты с внутренним контекстом; сложная логика при своей вёрстке — headless-хуки. HOC — легаси. Правило: начинать с props, переходить к композиции, когда props начинают описывать разметку.

Другие вопросы раздела