Что такое «компонент инжектора»?
Компонент инжектора принимает реквизиты, необязательно вычисляет новые, а затем внедряет их в свой дочерний элемент через React.cloneElement()
. Важно отметить, что он также не добавляет никаких новых компонентов в DOM. Он существует только в виртуальной DOM React.
Когда можно использовать компоненты инжектора?
В структуре прототипирования, созвездии, мы используем МНОГО компонентов инжектора, чтобы абстрагироваться от логики и красиво отделить такие проблемы, как стиль, анимация и взаимодействие, от наших компонентов макета. React Native также использовал этот шаблон в TouchableWithoutFeedback.
Вот пример рендера с использованием некоторых компонентов инжектора:
Но вот в чем дело: знаете ли вы, какие из этих компонентов являются форсунками? Сколько элементов фактически добавлено в DOM?
Знакомство с <Injector_ >
Соглашением об именах
В constelation
мы решили обозначать компоненты инжектора постфиксом _
. Думайте о постфиксе _
как о пустом месте, которое должен заполнить ребенок. Кроме того, имя хорошо цепляется. Ниже может быть написано, как: «равномерное, анимированное, стилизованное представление с дочерним текстом».
Обратите внимание, насколько проще идентифицировать форсунки? Кроме того, теперь мы можем легко увидеть, что в DOM добавлены два элемента (два не имеют постфикса _
).
Становится лучше
Вы можете заметить ошибки в этом рендере?
Да! Компоненты инжектора никогда не должны закрываться автоматически, и они не должны оборачиваться несколькими дочерними элементами. Мы можем исправить это во время кода и не ждать ошибок во время выполнения.
Это соглашение об именах помогает разработчикам понять контракт компонента и, безусловно, помогло мне лучше понять, чем TouchableWithoutFeedback
и TouchableOpacity
различаются.
Еще лучше с инструментами
Соглашения об именах позволяют использовать инструменты. Я отредактировал свою цветовую схему vim, чтобы раскрашивать компоненты инжектора по мере раскрашивания реквизита, что еще больше усиливает концепцию и позволяет мне легко просматривать рендеры и идентифицировать их.
В будущем мы могли бы также создать правила lint для выявления ошибок во время кода, используя это соглашение.
больше соглашений об именах = ›больше полезных инструментов
Другие соглашения об именах
Изначально опубликовано в React-playbook