om.next: как иметь несколько компонентов, которые используют примиритель

Я новичок в om.next (и в clojurescript), и у меня есть следующий вопрос. Я могу получить только корневой компонент, который будет вызываться с помощью реконсилера (т.е. вызывать его метод запроса); каждый другой компонент, кажется, должен вызываться с помощью реквизита и om/factory, Я думаю, что что-то упустил.

Я пытаюсь создать приложение со списком задач (100 баллов за оригинальность!) С фильтром для отображения завершенных / неполных / всех элементов. Если мой TodoList компонент является корневым компонентом, я могу вызвать его с помощью запроса: [:todos] без проблем. Я хотел бы иметь другой корневой компонент, а также иметь Filter Компонент, который проходит через согласователь.

Возможные варианты я вижу:

  • есть несколько ом / add-root! вызовы (это препятствует тому, чтобы у нас были вложенные компоненты, которые используют согласователь, и это не тот шаблон, который я вижу в руководствах)

  • обернуть все в глобальный компонент и передать состояние через реквизит. Но примеры делают чтение мультиметодом, который не совместим с таким подходом.

Это возможно? Спасибо!

2 ответа

Концепция Om Next (и других, таких как reframe) заключается в том, что существует один источник правды - состояние вашего приложения. С Om Next пользовательский интерфейс вашего приложения состоит из одного (перевернутого) дерева компонентов. Во время рендеринга ваше приложение загружается в ваш Root Компонент по Om Далее интерпретируем его статический запрос. Это состояние приложения принимается как "реквизит". Ваша задача - разложить эти подпорки и передать "подпорки" вниз по дереву. Вы делаете это в render метод каждого из ваших компонентов.

Таким образом, ваш второй вариант - это путь. read Они связаны с ключевыми словами, которые находятся в ваших запросах статического компонента. Если вы убедитесь, что ваше состояние в формате DB по умолчанию, то на самом деле каждый read может быть реализован таким же образом, используя db->tree, Наличие глобального компонента и создание каждого read мультиметоды являются несвязанными понятиями и, следовательно, не являются несовместимыми. На самом деле наличие обоих довольно идиоматично.

Уже есть примеры приложений ToDo, которые вы можете посмотреть для справки: здесь и здесь.

Стоит отметить, что ваш Root запрос компонента будет использовать соединения для включения других компонентов, поэтому ваш запрос [:todos] не выглядит правильным для меня. Что-то вроде [{:todos (om/get-query TodoList)}] было бы лучше:-)

Если вы еще этого не сделали, посмотрите на Компоненты, Идентичность и Нормализацию · omcljs / om Wiki · GitHub. Из этого туториала Вы узнаете, как организовать многокомпонентное приложение под одним рутом, а также должно быть ясно read, mutate, Ident, IQuery и т. д. используются каждым отдельным компонентом для координации взаимодействия с состоянием единственного приложения через посредник. Состояние приложения - это, в основном, база данных приложения, использующая вложенные структуры данных внутри одной карты.

Приложения React обычно имеют только один корневой компонент - если есть несколько корней, они обычно организованы по маршрутам, то есть по одному корню на маршрут (см. Также Компоненты реагирования верхнего уровня - Средний).

Также: Ом / Далее: Примиритель - Средний

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