私はこのOM チュートリアルを進めていますが、OM コンポーネントと単純な関数 (特に om/component マクロ) をいつ使用するかが明確ではありません。
チュートリアルには次のように書かれています。
最初の引数は、アプリケーションの状態データとバッキング React コンポーネント (ここでは owner と呼ばれます) を取る関数です。この関数は Om コンポーネントを返す必要があります。つまり、om.core/component マクロが生成するような om/IRender インターフェイスのモデルです。
; here the function (fn [app owner]) indeed returns an OM component
(om/root
(fn [app owner]
(om/component (dom/h2 nil (:text app))))
app-state
{:target (. js/document (getElementById "app"))})
次のセクションでは、次のリストのレンダリング ループの例を示します。
; this one does not return an om component (or does it?). it returns a virtual dom
(om/root
(fn [app owner]
(apply dom/ul nil
(map (fn [text] (dom/li nil text)) (:list app))))
app-state
{:target (. js/document (getElementById "app0"))})
ここでは基本的に、(仮想) dom を直接返しているだけであり、OM コンポーネントにラップされていません。このマクロは単に IRender 関数を具体化するのに役立ちますが、単純な関数をそのまま使用することもできるようです。ライフサイクル状態を持つ (または所有者が get-props を呼び出す必要がある) OM コンポーネントを具体化しますが、仮想 dom を作成する必要があるだけのコンポーネントの場合は、単純な関数を使用したいと思います (したがって、ビルド/ビルドは必要ありません)。私の仮想DOMを作成するためのすべての機能)。ここで何が欠けていますか?なぜマクロはまだ有用なのですか (そして私にはわかりません)。