Skip to content

Instantly share code, notes, and snippets.

@xificurC
Created September 3, 2024 07:10
Show Gist options
  • Save xificurC/ca5f5820e94a53044826a66cecada100 to your computer and use it in GitHub Desktop.
Save xificurC/ca5f5820e94a53044826a66cecada100 to your computer and use it in GitHub Desktop.
In Electric Clojure, how do I run a server effect on a DOM event?
;;; How do I run a server effect on a DOM event?
;; button clicks, concurrent
(dom/button
(e/for [[e spend] (dom/OnAll "click")]
(spend (e/server (println "clicked")))))
;; button clicks, serialized (backpressure the user, disable button)
(dom/button
(let [spend (e/Token (dom/On "click"))]
(dom/props {:disabled (boolean spend)})
(when spend
(spend (e/server (transact! my-tx))))))
;; add todo item, concurrent
#?(:cljs (defn consume! [nd]
(let [v (.-value nd)]
(set! (.-value nd) "") v)))
#?(:cljs (defn event->text [e]
(when (= "Enter" (.-key e))
(not-empty (consume! (.-target e))))))
(dom/input
(e/for [[txt spend] (dom/OnAll "keydown" event->text)]
(spend (e/server (transact! {:todo/text txt})))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment