Для любопытных

Проблема

Допустим, у вас есть вид, похожий на

Мы видим общий шаблон упаковки наших компонентов в ‹div› с некоторыми классами позиционирования (они применяют верхнее и нижнее поля).

Один из способов решить эту проблему

Одним из решений может быть передача значений интервала через props и добавление значения в className на IconLabelValueRow.

Тогда SomeView будет выглядеть так:

Другая проблема

Но это не решает проблемы для EditValueRow. Нам нужно будет скопировать и вставить преамбулу свойств spaceTop и spaceBottom в другой компонент следующим образом:

Итак, теперь SomeView выглядит так:

Но копирование + вставка нас огорчает, так как же украсить компонент компонуемым образом?

Лучшее решение

Введите функции высшего порядка. Функция высшего порядка принимает компонент и в этом примере возвращает функцию без состояния.

И теперь мы можем использовать это в IconLabelValueRow.

и в EditLabelRow:

И теперь мы живем в счастливом мире.