Лучшие практики
Этот документ содержит общие рекомендации и указания по эффективному использованию библиотеки компонентов @ui8kit/core. Он охватывает стратегии выбора компонентов, использование системы вариантов, практики семантического HTML, доступность, оптимизацию производительности и паттерны композиции. Для общих паттернов разработки и типичных примеров использования см. Базовый рабочий процесс. Для обработки граничных случаев, требующих пользовательских решений, см. Продвинутый рабочий процесс.Стратегия выбора компонентов
Выбор правильного уровня компонента является основой для написания поддерживаемого кода. Трёхслойная архитектура обеспечивает чёткие границы для различных уровней абстракции.Схема принятия решений для выбора компонентов
Использование Уровня 1: Базовые примитивы
Используйте базовые примитивы, когда вам нужен максимальный контроль над макетом и семантической структурой:| Компонент | Когда использовать | Пример сценария |
|---|---|---|
Block | Нужен семантический HTML5 элемент с вариантами | <Block component="section">, <Block component="nav"> |
Box | Нужен универсальный контейнер без семантического значения | Обёрточные div’ы, flex элементы, ячейки сетки |
Grid | Нужен CSS Grid макет | Сетки товаров, галереи изображений, макеты карточек |
Flex | Нужен flexbox макет с явным контролем | Пользовательские панели инструментов, сложное выравнивание |
Stack | Нужна вертикальная/горизонтальная укладка с промежутком | Поля форм, группы кнопок, секции контента |
Использование Уровня 2: UI компоненты
Используйте UI компоненты для готовых, предварительно стилизованных элементов:Использование Уровня 3: Компоненты макетов
Используйте компоненты макетов для структурной организации страницы:Использование системы вариантов
Система вариантов устраняет ~80% использования className через 12 композируемых вариантов. Следуйте этим рекомендациям, чтобы максимизировать её эффективность.Поток применения вариантов
Рекомендации по композиции вариантов
| Категория вариантов | Пропы | Значения | Случай использования |
|---|---|---|---|
| Spacing | p, px, py, pt, pb, pl, pr, m, mx, my, mt, mb, ml, mr | none, xs, sm, md, lg, xl, 2xl, auto | Контроль отступов и полей |
| Colors | bg, c, borderColor | Цвета дизайн-системы | Цвета фона, текста, границ |
| Layout | w, h, minH, maxW, position | auto, full, screen, fit, min, max | Контроль размеров и позиционирования |
| Typography | size, weight, align, leading | Значения для шрифтов | Стилизация текста |
| Effects | rounded, shadow, border | Предустановленные значения | Визуальные улучшения |
Когда использовать className
Система вариантов покрывает ~80% потребностей в стилизации. ИспользуйтеclassName для:
- Анимаций и переходов (не покрывается вариантами)
- Псевдоклассов таких как
:hover,:focus,:active - Пользовательских grid/flex паттернов за пределами базовых макетов
- Специфичных для проекта утилитарных классов, не входящих в дизайн-систему
Лучшие практики семантического HTML
Библиотека делает акцент на семантических элементах HTML5 для доступности и SEO. Всегда используйте наиболее подходящий семантический элемент.Выбор семантического элемента
Примеры семантического HTML
Лучшие практики доступности
Убедитесь, что все компоненты доступны для пользователей с ограниченными возможностями, следуя рекомендациям WCAG.Основные принципы доступности
| Принцип | Реализация | Пример |
|---|---|---|
| Навигация с клавиатуры | Обеспечьте доступность всех интерактивных элементов с клавиатуры | Используйте семантический <button> вместо <div onClick> |
| ARIA метки | Предоставьте метки для программ чтения с экрана | aria-label, aria-labelledby, aria-describedby |
| Управление фокусом | Видимые индикаторы фокуса | Стили :focus-visible |
| Цветовой контраст | Минимальное соотношение 4.5:1 для текста | Используйте цвета дизайн-системы |
| Альтернативный текст | Описательный текст для изображений | Всегда предоставляйте проп alt |
Доступность форм
Оптимизация производительности
Следуйте этим паттернам для поддержания оптимальной производительности в больших приложениях.Композиция компонентов против передачи пропов
Рекомендации по мемоизации
Избегайте ненужных повторных рендеров
Паттерны композиции
Библиотека поддерживает несколько паттернов композиции. Выберите подходящий паттерн для вашего случая использования.Сравнение паттернов
Паттерн составных компонентов
Используйте для гибких структур компонентов с предопределёнными подкомпонентами:Паттерн передачи пропов
Все UI компоненты передают пропы вариантов от базовых компонентов:Паттерн хуков контента
Используйте для динамического рендеринга в компонентах макетов:Распространённые антипаттерны
Избегайте этих распространённых ошибок при использовании библиотеки.Антипаттерн 1: Чрезмерное использование className
Антипаттерн 2: Обход семантического HTML
Антипаттерн 3: Воссоздание существующих компонентов
Антипаттерн 4: Избыточная вложенность
Антипаттерн 5: Игнорирование data-class атрибутов
Итоговый контрольный список
Используйте этот контрольный список при создании интерфейсов с @ui8kit/core:- Выбор компонентов: Используйте соответствующий уровень (Core/UI/Layout) для каждого случая использования
- Система вариантов: Предпочитайте варианты вместо className для ~80% потребностей в стилизации
- Семантический HTML: Используйте подходящие семантические элементы через проп
componentвBlock - Доступность: Включайте ARIA метки, навигацию с клавиатуры и управление фокусом
- Производительность: Композируйте компоненты естественно, избегайте передачи пропов
- Композиция: Используйте составные компоненты, передачу пропов и хуки контента соответствующим образом
- Data атрибуты: Используйте
data-classатрибуты для таргетинга DOM и тестирования - Типобезопасность: Используйте TypeScript типы для валидации пропов
- Избегайте антипаттернов: Не злоупотребляйте className, не обходите семантику и не воссоздавайте компоненты