2017-02-21 39 views
7

Próbuję opanować odczynnik w clojurescript za pomocą prostego programu do rysowania.Śledzenie myszy w clojurescript/reagent/reagi?

Szukam przykładu, jak uzyskać dostęp do pozycji myszy w pryncypialnym stylu inspirowanym "FRP" z Reagi.

W różnych przykładach odczynników widzę rzeczy, które wyglądają tak:

[:p [:onmousemove (fn (evt) ...)]] 

dołączyć obsługi do elementu DOM.

I zrobić „zachowanie” Reagi chcę napisać coś takiego:

(def mouse-positions (r/behavior (...))) 

Ale jak mogę połączyć te dwa, tak, że do obsługi dodać elementu DOM zasila Reagi zachowanie?

Po drugie, ponieważ używam odczynnika, spodziewam się, że te węzły DOM będą regularnie odtwarzane. Przypuszczalnie będę musiał ponownie powiązać obsługę zdarzeń ze strumieniem Reagi. Jak mogę to zapewnić?

okrzyki

Odpowiedz

0

Zastanawiam się, czy strumień zdarzeń Reagi byłoby lepiej przystosowane. Coś wzdłuż linii:

(defonce mouse-events (r/events {:x 0 :y 0})) 

(defn home-page [] 
    [:div {:onMouseMove (fn [event] 
         (r/deliver mouse-events {:x (.-clientX event) 
               :y (.-clientY event)}))}]) 

Następnie można deref strumień zdarzeń z @mouse-events. Nie powinieneś martwić się koniecznością ponownego powiązania ze strumieniem zdarzeń, ponieważ zawiera on odniesienie do niego.

Należy jednak pamiętać, że naciśnięcie wartości w strumieniu Reagi nie spowoduje, że Odczynnik ponownie wyświetli węzeł, do którego odwołuje się bezpośrednio. Do tego potrzebny będzie atom odczynnika.

Jeśli tworzysz aplikację do rysowania, wyobrażam sobie, że twój stan/atom zostanie zapisany gdzie indziej, a ty swap! lub reset!, aby spowodować renderowanie.

Należy również pamiętać, że zarówno zachowania, jak i zdarzenia zawierają tylko odniesienie do najnowszej wartości, co może nie być idealne dla aplikacji do rysowania. Istnieje również Reagi's buffer, który może pomóc w tym.