EN RU
Issues

Методология

Технологии

Инструментарий

Библиотеки

Учебные материалы

Структура компонента

Обычно базовая структура компонента выглядит примерно так:

src/components/Button/
├── Button.css
├── Button.tsx
├── Button@desktop.css
├── Button@desktop.tsx
├── desktop.ts
├── _view
│   ├── Button_view_default.css
│   └── Button_view_default.tsx
└── hooks
    └── useCheckedState.ts

Платформы

Если у компонента есть особенности, специфичные для платформы, — например, состояние при наведении, — создайте реализацию для этой платформы и реэкспортируйте всё из общей реализации.

Общая реализация:

// src/components/Button/Button.tsx
import React from 'react'
import './Button.css'

export const Button = ({ children }) => <button className="Button">{children}</button>

Реализация для десктопа:

// src/components/Button/Button@desktop.tsx
export * from './Button'
import './Button@desktop.css'

Публичный API

Публичный API позволяет контролировать, что должно быть доступно разработчику, а также скрывает от потребителя, что для конкретной платформы часть кода может отсутствовать.

Очень важно, чтобы в проекте был настроен tree shaking, иначе в итоговый бандл может попасть неиспользуемый код.

Пример:

// src/components/Button/desktop.ts
export * from './Button@desktop'
export * from './_view/Button_view_default'
export * from './hooks/useCheckedState'

Использование:

// src/components/Feature/Feature.tsx
import {
  Button as ButtonDesktop,
  withViewDefault,
  useCheckedState,
} from 'components/Button/desktop'