Я начинаю работу с om и ClojureScript с очень простым приложением.
Мое глобальное состояние приложения выглядит так:
(def app-state (atom {:animals [ {:name "dog" :img "pic01.jpg"}
{:name "cat" :img "pic02.jpg"}
{:name "mouse" :img "pic03.jpg"}
{:name "camel" :img "pic04.jpg"}]}))
Свойство name каждой хэш-карты внутри вектора «животные» преобразуется в структуру списка HTML (например, LI-тег) с помощью компонента om, который я назвал «меню». Каждая запись отображается другим компонентом, называемым «записью». (например, как элемент UL). Всякий раз, когда пользователь наводит курсор на одну из записей списка, внешний вид записи меняется (возможно, меняется фон). Я фиксирую эти текущие состояния внутри компонента входа, который я инициализирую через om/IInitState.
Это работает до сих пор. Теперь я хочу добавить еще один компонент, который называется «дисплей». Он должен иметь возможность отображать изображения, связанные с именами животных, в глобальном состоянии всякий раз, когда пользователь щелкает запись в списке. Я спрашиваю себя, что было бы лучшим способом решить эту проблему.
Я вижу две возможности:
Сохранение локального состояния в компоненте «отображение», которое обновляется событием onClick из компонента «запись». Здесь мой вопрос будет таким: как я могу обновить состояние компонента из другого компонента?
Или введение другого свойства в глобальное состояние, которое может называться: «active_section», которое обновляется событием onClick в компоненте ввода и считывается компонентом «отображение». Но так ли это необходимо?