2017-02-21 6 views
7

私はシンプルな描画プログラムでクロージススクリプトの試薬を手に入れようとしています。クロージャスクリプト/試薬/試薬の追跡マウス?

私は、原理的な「FRP」インスピレーションスタイルでマウスの位置にアクセスする方法の例をReagiで探しています。

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

は、DOMの要素にハンドラをアタッチする:様々な試薬の例では

私はこのように物事を見ることができます。

そしてReagi「行動」を作るために、私はこのような何か書きたい:

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

をしかし、私はDOM要素に追加ハンドラはReagiの振る舞いを供給するようにどのように私はこれらの2を組み合わせていますか?

第2に、試薬を使用しているので、私はこれらの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でイベントストリームをDEREFすることができます。イベントストリームへの参照が保持されているため、イベントストリームに再バインドする必要はありません。

しかし、値をReagiストリームにプッシュしても、Reagentはそれを直接参照するノードを再レンダリングしません。そのためには、ある種の試薬原子が必要です。

描画アプリケーションを作成している場合は、状態/アトムが別の場所に保存されていて、レンダリングが発生すると思われるまたはreset!があると思います。

また、ビヘイビアとイベントは両方とも最新の値への参照を保持しているだけで、描画アプリケーションには適していない可能性があります。 Reagiのbufferもあります。

関連する問題