IHOR.DEVБАЗА_ЗНАНЬ
МЕНЮ

~/blog / Вебстек / building-a-react-design-system-that-stays-useful.md

// посібник · 3 хв читання

Створення корисної дизайн-системи на React

Створюйте бібліотеку React-компонентів із семантичними елементами, стабільними props і токенами дизайну. Визначайте доступність, стани й порядок змін.

Коротка відповідь

Починайте дизайн-систему React з елементів, які повторюються на реальних екранах: кнопок, полів із підписами, повідомлень і відступів. Кожен компонент має отримати вузький семантичний контракт. Кнопка виконує дію, посилання забезпечує перехід. Кольори й відступи належать спільним токенам, а правила бронювання, перевірки доступу й API — функціональності продукту.

Каталог компонентів корисний, коли пояснює вимкнені, очікувальні, помилкові, фокусні стани та довгі тексти так само ретельно, як стандартний вигляд. Проєкт IMMAGINE дає конкретний матеріал для візуальної перевірки: запис на консультацію, картки послуг і мобільне меню. Це приклади повторюваних потреб інтерфейсу, а не свідчення використання React у його WordPress-реалізації.

Практичні кроки реалізації

Перш ніж визначати публічний API, розберіть два-три наявні сценарії. Порівняйте підписи, розміщення помилок, клавіатурні дії й адаптивні відступи. Виносьте компонент, коли можете назвати повторювану поведінку. Незвична картка тарифу може залишатися компонентом функціональності, поки інший екран не потребує того самого контракту.

Визначте невеликий набір токенів для поверхні, тексту, межі, фокусної рамки й відступів. Назви за призначенням дадуть змогу змінити значення для темної теми без перейменування всіх споживачів. Потім задокументуйте варіанти компонентів із прикладами застосування. Десять логічних прапорців оформлення створюють комбінації, які потрібно підтримувати й перевіряти.

Приклад реалізації

Ця кнопка зберігає стандартні props кнопки й надає явний вибір оформлення. Тип за замовчуванням запобігає випадковому надсиланню форми. Дії надсилання явно задають type="submit". Споживач визначає доступний текст і поведінку завантаження.

import type { ComponentProps } from "react";

type ButtonProps = ComponentProps<"button"> & {
  tone?: "primary" | "secondary";
};

export function Button({
  tone = "primary", type = "button", className = "", ...props
}: ButtonProps) {
  return <button {...props} type={type} data-tone={tone}
    className={"button " + className} />;
}

Визначте стилі .button у таблиці стилів споживача, зокрема видиму рамку :focus-visible і два варіанти data-tone. Постачання CSS є частиною контракту пакета. У Next.js презентаційний компонент може бути сумісним із сервером; споживач, що володіє обробниками кліків, належить межі Client Component.

Компроміси й альтернативи

Перевірена бібліотека доступних базових елементів корисна для меню, діалогів і складних сценаріїв вибору, де керування фокусом виходить за межі простого стандартного елемента. Перед створенням обгортки перевірте контракт взаємодії. Обгортка має зберігати потрібні можливості налаштування й не перетворювати кожну внутрішню деталь на новий публічний prop.

Типові помилки

Уникайте клікабельних div, помилок, позначених лише кольором, незадокументованих імпортів CSS і назв компонентів, прив’язаних до однієї кампанії. Повторне використання картки не вимагає спільного отримання даних. Перед фіксацією висоти перевірте довгі українські підписи: переклад може виявити припущення про розмір, непомітне на англійському екрані.

Контрольний список перед випуском

  • Клавіатурний фокус видимий у кожній підтримуваній темі.
  • Кнопки й посилання зберігають стандартну семантику.
  • Кожен варіант має задокументоване застосування.
  • Перевірено помилкові, очікувальні, вимкнені стани й довгі тексти.
  • Імпорти CSS пакета й відповідальність за несумісні зміни визначені явно.

Поширені запитання

Коли бібліотеку варто виділити в окремий пакет?

Коли кільком застосункам потрібні незалежні цикли випуску й є відповідальний за сумісність версій. Спільну папку простіше змінювати, поки API ще формується.

Чи має кожен екран використовувати ті самі компоненти?

Спільними мають бути сталі взаємодії й візуальні правила. Незвичні макети залишайте локальними; виносьте патерн, коли повторне використання підтверджує сталість поведінки й назв.

Наступний крок

Порівняйте дві реальні форми перед публікацією API компонентів. Перевірте клавіатурний фокус, помилкове введення, очікування надсилання й довші перекладені підписи в обох; поведінку окремої функціональності залишайте поза спільним елементом.

Першоджерела

Пов’язані матеріали й приклади

Ігор Харчишин

Незалежний full-stack інженер продуктів, який пише посібники з реалізації розширень браузера та сучасних вебпродуктів на основі першоджерел.

Потрібно реалізувати це у вашому продукті?

Застосунки на React і Next.js із продуманим рендерингом, надійними потоками даних та зрозумілим запуском.