Skip to main content

Лучшие практики

Этот документ содержит общие рекомендации и указания по эффективному использованию библиотеки компонентов @ui8kit/core. Он охватывает стратегии выбора компонентов, использование системы вариантов, практики семантического HTML, доступность, оптимизацию производительности и паттерны композиции. Для общих паттернов разработки и типичных примеров использования см. Базовый рабочий процесс. Для обработки граничных случаев, требующих пользовательских решений, см. Продвинутый рабочий процесс.

Стратегия выбора компонентов

Выбор правильного уровня компонента является основой для написания поддерживаемого кода. Трёхслойная архитектура обеспечивает чёткие границы для различных уровней абстракции.

Схема принятия решений для выбора компонентов

Источники: README.md64-89 README.md105-120 README.md147-168 src/components/README.md1-19

Использование Уровня 1: Базовые примитивы

Используйте базовые примитивы, когда вам нужен максимальный контроль над макетом и семантической структурой: Источники: README.md81-103 src/components/README.md23-92

Использование Уровня 2: UI компоненты

Используйте UI компоненты для готовых, предварительно стилизованных элементов:
Источники: README.md105-145 src/components/README.md94-204

Использование Уровня 3: Компоненты макетов

Используйте компоненты макетов для структурной организации страницы:
Источники: README.md147-168 src/layouts/DashLayout.tsx1-99

Использование системы вариантов

Система вариантов устраняет ~80% использования className через 12 композируемых вариантов. Следуйте этим рекомендациям, чтобы максимизировать её эффективность.

Поток применения вариантов

Источники: README.md170-217 src/lib/core-classes.json1-619 scripts/cva-extractor.ts223-260

Рекомендации по композиции вариантов

Источники: README.md171-217 src/components/README.md206-222

Когда использовать className

Система вариантов покрывает ~80% потребностей в стилизации. Используйте className для:
  1. Анимаций и переходов (не покрывается вариантами)
  2. Псевдоклассов таких как :hover, :focus, :active
  3. Пользовательских grid/flex паттернов за пределами базовых макетов
  4. Специфичных для проекта утилитарных классов, не входящих в дизайн-систему
Источники: README.md278-304 src/components/README.md237-244

Лучшие практики семантического HTML

Библиотека делает акцент на семантических элементах HTML5 для доступности и SEO. Всегда используйте наиболее подходящий семантический элемент.

Выбор семантического элемента

Источники: README.md14 src/components/README.md239 src/core/ui/Block.tsx1-15

Примеры семантического HTML

Источники: README.md14 src/components/README.md28-64 src/core/ui/Block.tsx1-15

Лучшие практики доступности

Убедитесь, что все компоненты доступны для пользователей с ограниченными возможностями, следуя рекомендациям WCAG.

Основные принципы доступности

Источники: README.md14 src/components/ui/Button.tsx1-40 src/components/ui/Image.tsx1-20

Доступность форм

Источники: src/components/GUIDE_CREATE_FORM.md1-50 src/components/README.md239

Оптимизация производительности

Следуйте этим паттернам для поддержания оптимальной производительности в больших приложениях.

Композиция компонентов против передачи пропов

Источники: README.md306-338 src/components/ui/Card.tsx1-80

Рекомендации по мемоизации

Источники: src/core/ui/Box.tsx1-30 src/components/ui/Button.tsx1-40

Избегайте ненужных повторных рендеров

Источники: README.md341-359

Паттерны композиции

Библиотека поддерживает несколько паттернов композиции. Выберите подходящий паттерн для вашего случая использования.

Сравнение паттернов

Источники: README.md15-17 src/layouts/LayoutBlock.tsx15-22 src/components/ui/Card.tsx1-80

Паттерн составных компонентов

Используйте для гибких структур компонентов с предопределёнными подкомпонентами:
Источники: README.md38-59 README.md121-145 src/components/ui/Card.tsx1-80

Паттерн передачи пропов

Все UI компоненты передают пропы вариантов от базовых компонентов:
Источники: README.md16 src/components/README.md12-18 src/components/ui/Button.tsx1-40

Паттерн хуков контента

Используйте для динамического рендеринга в компонентах макетов:
Источники: src/layouts/LayoutBlock.tsx15-22 src/layouts/LayoutBlock.tsx1-50

Распространённые антипаттерны

Избегайте этих распространённых ошибок при использовании библиотеки.

Антипаттерн 1: Чрезмерное использование className

Антипаттерн 2: Обход семантического HTML

Антипаттерн 3: Воссоздание существующих компонентов

Антипаттерн 4: Избыточная вложенность

Антипаттерн 5: Игнорирование data-class атрибутов

Источники: src/components/README.md223-235 src/components/README.md237-244

Итоговый контрольный список

Используйте этот контрольный список при создании интерфейсов с @ui8kit/core:
  • Выбор компонентов: Используйте соответствующий уровень (Core/UI/Layout) для каждого случая использования
  • Система вариантов: Предпочитайте варианты вместо className для ~80% потребностей в стилизации
  • Семантический HTML: Используйте подходящие семантические элементы через проп component в Block
  • Доступность: Включайте ARIA метки, навигацию с клавиатуры и управление фокусом
  • Производительность: Композируйте компоненты естественно, избегайте передачи пропов
  • Композиция: Используйте составные компоненты, передачу пропов и хуки контента соответствующим образом
  • Data атрибуты: Используйте data-class атрибуты для таргетинга DOM и тестирования
  • Типобезопасность: Используйте TypeScript типы для валидации пропов
  • Избегайте антипаттернов: Не злоупотребляйте className, не обходите семантику и не воссоздавайте компоненты
Источники: README.md388-402 src/components/README.md237-244