我想在ClojureScript函数的Reagent表单中添加“自动保存”功能。在Clojure中,我通常使用ScheduledExecutorService
来制作东西。由于ClojureScript中没有该功能,因此我提出了以下建议。
(def delay-handle (atom nil))
(defn clear-autosave-delay! []
(.clearTimeout js/window @delay-handle))
(defn start-autosave-delay!
[doc-save-fn delay-ms page-map-atom]
(reset! delay-handle (.setTimeout js/window doc-save-fn delay-ms page-map-atom)))
(defn change-watcher!
[doc-save-fn page-map-atom]
(let [delay (* 1000 (get-in @page-map-atom [:options :editor_autosave_interval]))]
(when (pos? delay)
(clear-autosave-delay!)
(start-autosave-delay! doc-save-fn delay page-map-atom))))
我将change-watcher!
函数放在用于输入控件的Reagent :on-change
处理程序中。每当发生更改时,它将重置延迟。如果延迟到期,将调用doc-save-fn
进行保存。
这似乎还可以,但不是很“ Clojuresque”。有没有更惯用的方式写这个?
答案 0 :(得分:1)
使用去抖动器解决此问题。这很简单,并且可以完成
<ListPerspective>
Click the × button to remove a message
</ListPerspective>