5.8 KiB
5.8 KiB
title
| title |
|---|
| Компоненты |
Компоненты
Правила создания и работы с компонентами.
1. Структура компонента
Ассистент при создании/рефакторинге компонента должен строго придерживаться следующей структуры файлов и папок:
component-name/
index.ts
component-name.tsx
styles/
component-name.module.css
locales/
ru.json
en.json
types/
component-name.interface.ts
component-name.type.ts
component-name.enum.ts
schemas/
schema-name.schema.ts
utils/
util-name.util.ts
hooks/
use-hook-name.hook.ts
stores/
store-name.store.ts
ui/
... # вложенные компоненты для component-name
Пояснения к структуре компонента: Обязательные файлы обязательны для всех компонентов, даже если они пустые.
- component-name/: Папка компонента корень для всего компонента.
- index.ts: экспортирует главный компонент, интерфейс и всё, что может быть переиспользовано.
- component-name.tsx: главный компонент.
- styles/component-name.module.css: стили компонента.
- locales/ru.json: локализация на русском языке.
- locales/en.json: локализация на английском языке.
- types/component-name.interface.ts: интерфейс пропсов компонента. Не обязательные файлы добавляются только при необходимости
- types/component-name.type.ts: типы компонента.
- types/component-name.enum.ts: enum компонента.
- schemas/schema-name.schema.ts: схемы валидации.
- utils/util-name.util.ts: утилиты компонента.
- hooks/use-hook-name.hook.ts: хуки компонента.
- stores/store-name.store.ts: хранилища состояния компонента.
- ui/: Папка для вложенных компонентов.
Требования к компоненту
- Использовать
memo()для всех компонентов, которые принимают пропсы. - Использовать
useMemoдля всех вычислений, которые передаются в пропсы других компонентов. - Использовать
useCallbackдля всех функций/методов, которые передаются в пропсы других компонентов.
Требования к вложенным компонентам
- Вложенный компонент — это полноценный компонент, который обязан полностью соблюдать все правила, описанные для компонентов (структура, именование, документация, типизация, стилизация и т.д.).
- Все вложенные компоненты размещаются только в папке ui/ основного компонента.
Пояснение Нет необходимости повторять структуру и требования — вложенный компонент подчиняется тем же правилам, что и любой другой компонент, только располагается в папке ui/ родительского компонента.
Требования к локализации
- Все добавленные локализации обязательно подключать в экземпляр
app/i18n(чтобы новые namespace были доступны для i18next).
Чек-лист для создания нового компонента
- Главный компонент размещён в корне и назван по правилу PascalCase.
- Создан файл стилей в папке
styles/, имя в kebab-case, используется BEM. - Все классы применяются через
className={styles['component-name']}. - Создана папка
locales/с файламиru.jsonиen.json. - Создан файл интерфейса пропсов в папке
types/, даже если интерфейс пустой. - Создан файл
index.tsс экспортом главного компонента и интерфейса. - Внутренние компоненты (если есть) размещены в папке
ui/. - Все важные части кода документированы по TSDoc (см. раздел 16).
- Остальные файлы (schemas, дополнительные типы, enum) добавлены только при необходимости.
- Именование файлов и папок соответствует правилам (см. выше).
- Нет неиспользуемого или невалидного кода.
- Для компонентов с пропсами используется
React.memo. - Для вычислений, передаваемых в пропсы, используется
useMemo. - Для функций, передаваемых в пропсы, используется
useCallback. - Все тексты вынесены в локализационные файлы и используются через i18n.
- Новые namespace подключены в экземпляр i18n.