2017-02-21 133 views
7

我正试图用简单的绘图程序来处理clojurescript中的试剂。在clojurescript/reagent/reagi中跟踪鼠标?

我正在寻找一个如何访问原型“FRP”灵感风格与Reagi鼠标位置的示例。

在各种试剂的例子,我能看到的东西,看起来像这样:

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

到处理程序附加到DOM的元素。

并作出Reagi“行为,”我想写的东西是这样的:

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

但我怎么结合这两种,这样的处理程序我添加到DOM元素馈送Reagi行为?其次,因为我使用的是试剂,我期望定期重新创建这些DOM节点。据推测,我需要继续重新绑定Reagi流的事件处理程序。我如何确保这一点?

欢呼声

回答

0

我不知道Reagi的事件流是否会更适合。沿线的东西:

(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)}))}]) 

然后,您可以使用@mouse-events取消参与事件流。您不必担心必须重新绑定到事件流,因为它拥有对它的引用。

但是请记住,将值推入Reagi流不会导致Reagent重新渲染直接引用它的节点。为此你需要某种试剂原子。

如果你正在创建一个绘图应用程序,我想你的状态/原子将被存储在其他地方,而你的swap!reset!会导致渲染发生。

另外,请注意,行为和事件都只保留对最新值的引用,这可能不适合绘图应用程序。 Reagi的buffer也有帮助。