Ich gehe durch diese OM tutorial, aber es ist mir nicht klar, wenn OM-Komponenten vs einfache Funktionen (insbesondere das om/Komponenten-Makro) zu verwenden.OM Components vs einfache Funktionen
Das Tutorial schreibt:
Das erste Argument ist eine Funktion, die die Anwendungszustandsdaten und der Träger, hier genannt Besitzer Reagieren Komponente nimmt. Diese Funktion muss eine Om Komponente zurückgeben - dh ein Modell des om/IRender Schnittstelle, wie om.core/Komponenten-Makro erzeugt
; 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"))})
Im nächsten Abschnitt werden wir das folgende Beispiel für eine Rendering-Schleife finden eine Liste:
; 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"))})
Hier sind wir Rückkehr im Grunde nur einen (virtuellen) dom direkt, nicht in einer OM-Komponente eingewickelt, so wäre die Frage: Warum wird die om/Komponenten-Makro existieren? Das Makro hilft uns einfach, die IRender-Funktion zu vereinheitlichen, aber es scheint, dass wir auch einfache Funktionen dafür verwenden können. Ich würde OM-Komponenten, die den Lifecycle-Status haben (oder den Besitzer get-props nennen), neu verfassen, aber für Komponenten, die nur virtual dom erzeugen müssen, würde ich eher einfache Funktionen verwenden (also brauche ich keine Build/Build- alle Funktionen um mein virtuelles Dom zu erstellen). Was fehlt mir hier? Warum ist das Makro immer noch nützlich (und ich sehe es nicht).
Okay, dann verstehe ich es. Das Makro könnte also vorhanden sein, wenn Sie eine einfache reaktive Komponente in eine OM-Komponente einbinden möchten. Vielleicht haben zukünftige Versionen von OM eine etwas andere Semantik im om/Komponenten-Makro, so dass Sie das Makro besser verwenden, selbst wenn Sie nur eine reaktive Komponente zurückgeben müssen. – shaft