Ich gehe durch dieses OM-Tutorial , aber es ist mir nicht klar, wann OM-Komponenten zu verwenden sind einfache Funktionen (insbesondere das Makro om / component).
Das Tutorial schreibt:
%Vor%Das erste Argument ist eine Funktion, die die Anwendungszustandsdaten übernimmt und die Unterstützung React-Komponente, hier Besitzer genannt. Diese Funktion muss eine Om-Komponente zurückgeben - d. h. ein Modell der om / IRender-Schnittstelle, wie om.core / component macro generiert
Im nächsten Abschnitt finden wir das folgende Beispiel einer Rendering-Schleife für eine Liste:
%Vor%Hier geben wir im Grunde nur ein (virtuelles) dom zurück, das nicht in eine OM-Komponente eingebettet ist. Die Frage wäre also: Warum existiert das om / component-Makro? 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-reps aufrufen müssen), neu verfassen, aber für Komponenten, die nur virtual dom erstellen 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).
Ich hatte dieselbe Frage letzte Woche und habe den Quellcode von Om durchforstet, um es herauszufinden.
Ich konnte keinen funktionalen Unterschied zwischen der Verwendung des Makros om/component
und nicht finden. Aber vielleicht kann diese Information etwas Licht auf jemanden werfen, der mehr über React weiß.
Jede Funktion f
, die an om/root
(und anschließend om/build
) übergeben wurde, wird innerhalb einer Om-Komponente eines Containers platziert. Diese Om-Komponente ist nur eine Dummy-React-Komponente, die alle Lebenszyklusereignisse an das Ergebnis von f
weiterleitet, wenn sie Oms Lifecycle-Protokolle implementiert (d. H. Wenn es sich um ein reify-Objekt handelt).
Wenn das Ergebnis von f
kein reify-Objekt ist, das diese Protokolle implementiert, wird angenommen, dass es sich um eine React-Komponente handelt, und es wird als Wert von der render
lifecycle-Funktion zurückgegeben.
(relevant: Oms Render-Funktion hier )
Tags und Links clojurescript om