在clojurescript/reagent/reagi中跟踪鼠标?
问题描述:
我正试图用简单的绘图程序来处理clojurescript中的试剂。在clojurescript/reagent/reagi中跟踪鼠标?
我正在寻找一个如何访问原型“FRP”灵感风格与Reagi鼠标位置的示例。
在各种试剂的例子,我能看到的东西,看起来像这样:
[:p [:onmousemove (fn (evt) ...)]]
到处理程序附加到DOM的元素。
并作出Reagi“行为,”我想写的东西是这样的:
(def mouse-positions (r/behavior (...)))
但我怎么结合这两种,这样的处理程序我添加到DOM元素馈送Reagi行为?其次,因为我使用的是试剂,我期望定期重新创建这些DOM节点。据推测,我需要继续重新绑定Reagi流的事件处理程序。我如何确保这一点?
欢呼声
答
我不知道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
也有帮助。