@vetsnakara/uikit-react v0.0.21
UIKit React
GitHub: https://github.com/vetsnakara/uikit-react
NPM: https://www.npmjs.com/package/@vetsnakara/uikit-react
Что это и зачем нужно
Репозиторий содержит библиотекy компонентов UIKit React, разработанную на основе дизайн-системы, используемой на ПРР (link).
Текущей реализацией дизайн-системы является базовый UIKit, который предоставляет для разработки инфоблоков разметку, систему классов для стилизации и набор скриптов для инициализации компонентов. Переиспользование компонентов реализовано только на уровне разметки, стилей и базовой логики, но не для всех составляющих компонента вместе.
Использование React позволяет инкапсулировать все составляющие компонента (разметку, стили и логику), тем самым повысив степень переиспользования компонентов. Данный подход призван увеличить скорость разработки, снизив количество кастомных решений при реализации стандартного функционала.
Приципы использования UIKit React
Код библиотеки UIKit React оформляется в виде отдельного репозитория. Весь код базового UIKit переносится в репозиторий UIKit React (исходный код, конфиги и зависимости для сборки статики), и все последующие доработки базового UIKit осуществляются в рамках репозиотрия UIKit React. Это позволит синхронизировать код базового UIKit с кодом React-компонентов. Библиотека UIKit React вместе с базовым UIKit оформляется в виде NPM-пакета, после чего библиотека подключается в проект отдельной зависимостью. Появляется возможность использовать разные версии библиотеки в разных ветках проекта и обновлять версию, когда это необходимо.
Стандарные механизмы разработки, сборки и деплоя инфоблоков остаются прежними. У разработчика появляется дополнительная возможность создания интерфейсов на React при помощи библиотеки компонентов UIKit React. При этом нет необходимости использовать React для решения любых задач на ПРР. Реализация существующих инфоблоков остается в рамках базового подхода. При создании новых инфоблоков, требующих реализации сложных интерфейсов, предлагается использовать React вместе с UIKit React.
UIKit React использует систему стилей базового UIKit. Генерируемая разметка полностью соответствует разметке компонентов в базовом UIKit. Разработчик не имеет дело с разметкой напрямую и не пишет классы от руки. Настройка внешнего вида и поведения компонентов призводится в клиентском коде с помощью пропсов.
UIKit React старается, где это возможно, переиспользовать логику, реализованную в рамках базового UIKit. Например, для компонентов, которые базируются на jQuery-плагинах, делаются соответствующие обертки в рамках React-компонентов. В первую очередь это касается компонентов Select и DateInput. Такой подход позволяет сохранить привычные настройки компонентов и сделать переход на UIKit React в рамках ПРР максимально удобным.
UIKit React не требует использования библиотеки для управленя состоянием. При необходимости с UIKit React может быть использована любая библиотека управленя состоянием (напр. Redux, MobX и др.). Но в базовом варианте для управления состоянием достаточно стандартных средств React (useState, useReducer, useContext).
Для унификации логики работы с формами и работы с серверным состоянием предлагается использовать хуки из библиотек
react-hook-form(link) иreact-query(link). Самостоятельная реализация функциональности данных библиотек является сложной и трудозатратной задачей.Для задач фильтрации, пагинации и сортировки библиотека UIKit React предлагает кастомный хук
useFilter, который инкапсулирует логику работы со списочными страницами.
Инструменты
Webpack- сборка библиотеки React-компонентовGulp/Grunt- сборка статики базового UIKitESLint- линтинг кодаStylelint- линтинг стилейPrettier- форматирование кодаTypescript- генерация TS-типов на основе JSDoc-описаний компонентов (для автокомплита при использовании библиотеки)Storybook- создание витрины компонентовHusky- работа с git-hooks
CI и pre-commit хуки
- В pre-commit хуках производится линтинг и форматирование кода, а также пересборка библиотеки, если изменились соответствющие файлы исходного кода.
- В
.github/workflowsнаходится конфигурация Github Actions для сборки и публикации Storybook на Github Pages
Основные зависимости (peerDeps)
react/react-dom- Reactreact-hook-form- хуки для работы с формами@tanstack/react-query- хуки для работы с серверным состояниемaxios- выполнение сетевых запросовyup- валидация пользовательского ввода (нужен как зависимость или удалить?)
Особенности сборки
- 🛑 peerDependencies
Скрипты
build:all- полная сборка пакета библиотеки перед публикациейbuild:assets- сборка статики базового UIKit в каталогassetsbuild:dev- сборка бандла библиотеки в DEV-режиме в каталогlibbuild:prod- сборка бандла библиотеки в PROD-режиме в каталог сборкиlibgen-types- генерация типов для автокоплита в месте использованя библиотеки (каталог размещения типовlib/types)move-bundle- перемещение бандлаuikit-react.min.jsизlibвassets/redesign-theme/scripts
storybook- запуск Storybook в режиме разработки (с проверкой существования собранной статики базового UIKit)
Публикация новой версии библиотеки
npm version patchnpm publish
Локальная разработка библиотеки
- В каталоге репозитория
uikit-reactвыполнить командуnpm linkдля создания глобальной ссылки на пакет - В каталоге репозитория
bft-portal-platform-site-prrвыполнить командуnpm link @vetsnakara/uikit-reactдля работы с пакетом через глобальную ссылку - При завршении разработки:
- Удалить глобальную ссылку на пакет командой
npm r -g @vetsnakara/uikit-react - В каталоге репозитория
bft-portal-platform-site-prrотвязать пакет от глобальной ссылки командойnpm unlink @vetsnakara/uikit-react
- Удалить глобальную ссылку на пакет командой
Использование UIKit React в проекте ПРР
uikit-react- ветка в репозитории ПРР, настроенная для использования UIKit React- установка
- скрипты
- разработка через Storybook
Разработка компонентов и инфоблоков через Storybook
- конфигурация
- глобальные стили
- MSW
- разработки инфоблоков через Storybook
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago