Когда я разрабатываю веб-приложение на основе React, я часто разделяю компоненты на умные и немые, а также на многоразовые и пользовательские. Многоразовые компоненты могут быть самодостаточными, например, <RedButton>
или <CustomSelect>
, но они также могут быть промежуточными компонентами, такими как <FluxStoreBinder>
. Компонент промежуточного программного обеспечения делает его children
, добавляя к ним некоторые функции, такие как подписка на чтение в/из хранилища Flux или перенос некоторых других объектов с сохранением состояния. Тем не менее, требуется дополнительная работа для подключения повторно используемого интеллектуального промежуточного компонента к немому компоненту, потому что их реквизиты вряд ли совпадают. Например. a <FluxStoreReader>
может «вернуть» свойство с именем data
, а ребенок типа <ToDoList>
ожидает toDoItems
.Реакция: как подключить повторно используемые компоненты с обычными немыми компонентами
Вопрос, который я хочу задать, заключается в том, как указать компонент промежуточного программного обеспечения, контент которого будет отображаться в каком виде. Каков надлежащий и рекомендуемый подход? В настоящее время я видел 3 способа говорить компонент промежуточного слоя, как сделать свои ребенок:
Обеспечивая функцию через реквизит, такие как
render={({arg1}) => <Child prop1={arg1}/>}
. Эти функции: вы можете получить доступ к собственному состоянию/реквизитам/etc в этой функции; вы можете обрабатывать и повторно отображать реквизиты; вы можете указать, какой дочерний объект должен отображать в зависимости от состояния; вы можете установить необходимые реквизиты для ребенка без необходимости прокси-сервера через компонент промежуточного программного обеспечения.Посредством ввода
React.cloneElement(children, props)
, предоставляя функцию для переназначенияprops
.Отверткой
React.cloneElement(children, props)
и проксированием полученных реквизитов до ребенка. Чистый компонентный подход, никаких обратных вызовов. У этого нет функций/гибкости вышеприведенного 2, а также требуется дополнительная работа: вам понадобится другое промежуточное ПО между вашим промежуточным программным обеспечением и его дочерним элементом для повторной карты реквизита.Четвертый вариант, предложенный Майком Троником, заключается в использовании компонентов более высокого порядка, которые являются, в основном, компонентами, где одним из необходимых аргументов является дочерний компонентный класс. Это почти то же самое, что и # 3, но вы не можете даже изменить тип ребенка после запуска фабрики.
Какой подход вы выбрали для своего применения? Зачем? Пожалуйста, поделитесь мыслями.
Было бы здорово услышать мнение ребята.
Зачем вам нужна фабрика классов, где класс с параметром достаточно для выполнения этой задачи? Фабрики 1) менее гибкие 2) менее очевидны, когда они видны в дереве JSX (без явной иерархии). – meandre
концепция функций высокого порядка такая же, как и компоненты высокого порядка, пожалуйста, убедитесь, что вы поняли сообщение выше. это немного запутанно, если вы не понимаете функции высокого порядка и закрытие. –
АБСОЛЮТНО НУЖНО В КОМПОНЕНТНЫХ ФАБРИКАХ с целью создания компонентов промежуточного программного обеспечения. Особенно, если вы не объясните это здесь, не разбирая поток, разместив ссылки на YouTube. И, пожалуйста, прекратите рекламировать свой канал YouTube. И, пожалуйста, прекратите выдвигать гипотезу о уровне опыта вашего противника. – meandre