Я пишу Clojurescript SPA, который должен регулярно (может быть, каждые 30 секунд, может быть, один раз в минуту) опрашивать сервер и получать некоторые обновленные данные.
Как мне сделать это в Clojurescript с Reagent (фреймворк React)?
Я просто использую низкоуровневый setTimeout () Javascript или есть более идиоматический способ сделать это в Clojurescript / React?
Примеры реагентов это хорошо показывает:
(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))
Первый пример в документах по переработке фреймов похож:
;; -- 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, во многих случаях мы повторно используем существующие механизмы с хост-платформы, не маскируя их оболочкой (или изобретая заново с помощью нового кода).