如何在Clojurescript with Reagent中刷新定时页面?

时间:2018-10-15 15:48:44

标签: reactjs clojurescript reagent

我正在编写Clojurescript SPA,该SPA需要定期(也许每30秒一次,也许每分钟一次)轮询服务器并获取一些更新的数据。

我该如何在Clojurescript with Reagent(React框架)中执行此操作?

我只是使用Javascript的低级setTimeout()还是在Clojurescript / React中有更惯用的方式做到这一点?

1 个答案:

答案 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一样,在许多情况下,我们都可以重用主机平台上的现有机器,而无需使用包装器对其进行伪装(或使用新代码进行改造)。