我试图用一个简单的绘图程序来处理clojurescript中的试剂。
我正在寻找一个如何在有原则的" FRP"中访问鼠标位置的示例。灵感来自output format的风格。
在各种试剂示例中,我可以看到如下所示的内容:
[:p [:onmousemove (fn (evt) ...)]]
将处理程序附加到DOM的元素。
制造Reagi"行为"我想写这样的东西:
(def mouse-positions (r/behavior ( ... )))
但是我如何组合这两个以便我添加到DOM元素的处理程序提供Reagi行为?
其次,当我使用试剂时,我期望这些DOM节点能够定期重建。据推测,我还需要将事件处理程序重新绑定到Reagi流。我如何确保这一点?
欢呼声
答案 0 :(得分: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重新呈现直接引用它的节点。为此你需要某种Reagent原子。
如果您正在创建绘图应用程序,我想您的状态/原子将存储在其他地方,并且swap!
或reset!
会导致渲染发生。
另请注意,行为和事件仅包含对最新值的引用,这对于绘图应用程序可能并不理想。还有Reagi的buffer
可能有助于此。