在clojurescript /试剂/ reagi中跟踪鼠标?

时间:2017-02-21 01:30:41

标签: clojurescript reagent

我试图用一个简单的绘图程序来处理clojurescript中的试剂。

我正在寻找一个如何在有原则的" FRP"中访问鼠标位置的示例。灵感来自output format的风格。

在各种试剂示例中,我可以看到如下所示的内容:

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

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

制造Reagi"行为"我想写这样的东西:

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

但是我如何组合这两个以便我添加到DOM元素的处理程序提供Reagi行为?

其次,当我使用试剂时,我期望这些DOM节点能够定期重建。据推测,我还需要将事件处理程序重新绑定到Reagi流。我如何确保这一点?

欢呼声

1 个答案:

答案 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可能有助于此。