Как поток данных в компонент рендерит функции в Om Next?

Должны ли данные компонента передаваться из его родительского компонента? Или запрос компонента позволяет данным поступать непосредственно в компонент?

Я вижу, как запрос объявляет, какие данные нужны компоненту. Должен ли родительский компонент проверять запрос дочернего компонента, чтобы выяснить, какие данные ему передать? Почему во многих примерах родительские компоненты вызывают что-то вроде (om/get-query ChildComponentClass)?

1 ответ

Решение

Да. Корневой компонент особенный. Все данные должны быть переданы в корневой компонент. Для этого запрос вашего корневого компонента будет представлять собой серию соединений. Каждый запрос компонента в вашем приложении (который имеет уникальный идентификатор) должен быть представлен как объединение на корневом уровне. Если данные поступают в ваше приложение, они должны входить в корень. Он помещается туда Om Next, который берет его из состояния приложения вашего приложения.

В приложении Om Next ваши компоненты составлены в виде дерева. Они связаны друг с другом через свои запросы, в частности, с помощью объединений.

Во время выполнения render методы каждого компонента получают свои реквизиты от родителей. Запрос компонента скажет вам, чего ожидать. Эти реквизиты являются простой картой.

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

Ваш последний вопрос "Почему во многих примерах родительские компоненты вызывают что-то вроде (om/get-query ChildComponentClass)?". Это соединение от родителя к потомку, описанное в синтаксисе запроса:

{:app/child-join (om/get-query app/ChildComponentClass)}

Мощность этих объединений неизвестна до времени выполнения: она может быть 0, 1 или много. Если это так, то вы можете описать это как отношения поиска. Если больше, чем один в качестве отношения мастер-детали. Если нет, то это тоже может быть.

Другие вопросы по тегам