Или почему я думаю, что вы, вероятно, создаете плохие приложения на React

Если вы совершенно не знакомы с принципами атомарного дизайна, то вам стоит на 100% пойти и попробовать Атомный дизайн Брэда Фроста. Если вы слишком ленивы, то вот самое быстрое и грязное.

Основы

Атомарный дизайн делится на 5 основных категорий. Атомы, молекулы, организмы, шаблоны и страницы. Лично я дохожу до создания организмов и обычно пропускаю шаблоны и сразу перехожу к страницам.

Это не будет концом всех руководств по Atomic Design, уж точно. Это просто моя собственная интерпретация и реализация теории. Я использую (и преподаю) эти принципы в течение последних 3–4 лет.

Я буду использовать несколько реальных примеров, которые мне недавно пришлось создать, чтобы забрать домой. Они используют styled-components, с которым лично у меня не так уж много опыта. Я предпочитаю использовать css-modules с помощью less, sass или стилуса.

Вот настоящие дизайны, над которыми мне пришлось работать:

Атомы

Это самые фундаментальные строительные блоки вашего пользовательского интерфейса. Эти компоненты никогда не импортируют ничего, кроме собственных таблиц стилей и React. Они чистые. Без гражданства.

Впрочем, за одним исключением. Они могут импортировать и использовать внешнюю библиотеку. Что-то вроде FontAwesome или react-insta-stories или что-то в этом роде. Пока они упрощают логику, необходимую для использования этой библиотеки.

Прекрасный пример - Button. Или компонент Icon. Или поле Input. Это самые основные части вашего пользовательского интерфейса. Вот небольшой пример:

Атомы также могут включать в себя какое-то общее / многократно используемое действие / эффект. Один из примеров, который я придумал, - это Drawer. Все, что он делает, это принимает isOpen опору. Это определяет, виден ли компонент (и его дочерние элементы). Конкретная версия этого компонента, которую я создал, прикреплена к нижней части области просмотра. Вот код для этого:

Все, что он делает, это перемещает дочерние элементы вниз под сгибом, если это closed. Родительский контейнер, вероятно, выиграет от overflow: hidden.

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

Молекулы

Молекулы представляют собой композицию из 2 или более атомов. Как правило, они также не имеют гражданства. Хорошим примером может служить ButtonWithIcon компонент. Или InputWithLabel.

Для проекта, над которым я работал, мне потребовалось два разных ящика. Один был FooterDrawer, а другой RounderDrawer. Эти два компонента стали причиной того, что я преобразовал функциональность Drawer в Atom.

Вот FooterDrawer:

А вот и RounderDrawer:

Как вы, наверное, догадались, эти два устройства идентичны по своим функциям, но отличаются по дисплею.

Организмы

Они должны быть сложными и содержать некоторые атомы и молекулы. Это такие компоненты, как верхние и нижние колонтитулы, формы. Все они охватывают гораздо большую часть пользовательского интерфейса и могут даже содержать некоторую внутреннюю логику / состояние. Отличный пример - CreditCardForm. Или ButtonWithTracking.

Эти компоненты больше приспособлены к определенным частям пользовательского интерфейса.

Я придумал пример SlideFooter. Хотя нет внутренней логики или состояния, однако, в нем используются два разных атома и одна молекула. Вот источник: