非常に単純なアプリケーションで 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"}]}))
ベクター「animals」内の各ハッシュマップの name プロパティは、「menu」と呼ばれる om コンポーネントによって HTML リスト構造 (ig LI-tag) にレンダリングされます。各エントリは、「エントリ」と呼ばれる別のコンポーネントによってレンダリングされます。(UL 要素として ig)。ユーザーがリスト エントリの 1 つにカーソルを合わせると、エントリの外観が変わります (おそらく背景が変わります)。これらの現在の状態を entry コンポーネント内に取り込み、om/IInitState を介して初期化します。
これはこれまでのところ機能します。次に、「ディスプレイ」と呼ばれる別のコンポーネントを追加します。ユーザーがリスト内のエントリをクリックするたびに、グローバル状態で動物の名前に関連付けられている画像を表示できる必要があります。これを解決する最善の方法は何かを自問しています。
2 つの可能性があります。
「エントリ」コンポーネントからの onClick イベントによって更新される「表示」コンポーネントでローカル状態を維持します。ここで、私の質問は次のようになります: コンポーネントの状態を別のコンポーネントから更新するにはどうすればよいですか?
または、「active_section」と呼ばれる別のプロパティをグローバル状態に導入します。これは、エントリ コンポーネントの onClick イベントによって更新され、「display」コンポーネントによって読み取られます。しかし、それは必要ですか?