Есть ли способ легко передать событие Litho от дочернего к корневому родителю?

Можно ли передать событие от n-го дочернего элемента к корневому родителю?

Я искал хорошее руководство, которое не включает объявление события на каждом узле в корень дерева. Моя конечная цель состоит в том, чтобы предоставить доступ к внешнему литографическому изображению и на Android Kotlin/Java.

Я вижу это в руководстве по Litho Events, но я немного не понимаю, что это означает. Значит ли это, что это невозможно сделать? Или это означает, что передача данных родному брату невозможна?

введите здесь описание изображения


person Bangonkali    schedule 25.11.2019    source источник


Ответы (1)


У вас есть возможность использовать @TreeProp, которые раскрывают свойство всего поддерева для компонента. Как правило, мы не рекомендуем этот подход, потому что он может затруднить определение зависимостей вашего Компонента — например, если вы хотите повторно использовать этот Компонент в другом дереве, создатель этого компонента не ясно, существует ли соглашение о том, что компонент должен размещаться в поддереве, которое определяет этот конкретный @TreeProp.

Предупреждение на скриншоте не совсем верно, я поработаю над его редактированием или удалением.

person Foxichu    schedule 25.11.2019
comment
Привет @Foxichu, есть ли у вас какие-либо советы по распространению пользовательских событий, аннотированных @Event, скажем, от 10-го дочернего элемента, без каскадирования события от родителя к родителю? Я не совсем уверен, как я могу использовать @TreeProp для этого. Моя цель — иметь только один обработчик событий в корневом компоненте, доступном для Android Kotlin. Затем я передаю неизменяемые данные обратно в корень, чтобы перерендерить все, если событие вызывает изменение состояния. В основном состояние обрабатывается вне корневого компонента в моем приложении. - person Bangonkali; 25.11.2019
comment
Если вы говорите о том, что родитель помещает EventHandler в глубокий дочерний элемент, вы можете поместить EventHandler в TreeProp, который затем будет доступен дочернему элементу. - person Foxichu; 26.11.2019
comment
Привет @Foxichu, я хотел бы узнать вашу идею, является ли это разумным подходом к передаче событий с использованием treeProp от очень глубокого дочернего элемента к корню, пропуская все промежуточные узлы между github.com/bangonkali/litho/tree/feature/codelab/ Я создал этот шаблон в качестве руководства для себя, но, к сожалению, я не видел других шаблонов, решающих эту конкретную проблему. Может быть, моя реализация вашего совета неверна или у вас были другие мысли о том, как это должно быть? - person Bangonkali; 28.11.2019
comment
Да, это то, что я имел в виду :) Общий шаблон имеет проблему, о которой я упоминал выше, о неявной связи, но в остальном он будет работать. Если вы ищете больше отзывов о подходе, это в точности аналогично использованию контекста React, поэтому вы можете посмотреть обсуждение этого! reactjs.org/docs/context.html - person Foxichu; 29.11.2019