我正在编写Clojurescript SPA,该SPA需要定期(也许每30秒一次,也许每分钟一次)轮询服务器并获取一些更新的数据。
我该如何在Clojurescript with Reagent(React框架)中执行此操作?
我只是使用Javascript的低级setTimeout()还是在Clojurescript / React中有更惯用的方式做到这一点?
答案 0 :(得分:3)
The Reagent examples表现得很好:
(ns simpleexample.core
(:require [reagent.core :as r]))
(defonce timer (r/atom (js/Date.)))
(defonce time-color (r/atom "#f34"))
(defonce time-updater (js/setInterval
#(reset! timer (js/Date.)) 1000))
第一个示例in the re-frame docs与之类似:
;; -- Domino 1 - Event Dispatch -----------------------------------------------
(defn dispatch-timer-event
[]
(let [now (js/Date.)]
(rf/dispatch [:timer now]))) ;; <-- dispatch used
;; Call the dispatching function every second.
;; `defonce` is like `def` but it ensures only one instance is ever
;; created in the face of figwheel hot-reloading of this file.
(defonce do-timer (js/setInterval dispatch-timer-event 1000))
与Clojure一样,在许多情况下,我们都可以重用主机平台上的现有机器,而无需使用包装器对其进行伪装(或使用新代码进行改造)。