我想编写一个类似时钟应用的东西。状态基本上是一个不断增加的数字。可以在这里看到一种实现方式。
(ns chest-example.core
(:require [om.core :as om :include-macros true]
[om.dom :as dom :include-macros true]
[cljs.core.async :as async])
(:require-macros [cljs.core.async.macros :refer [go]]))
(defonce app-state (atom {:time 0}))
(defn clock-view [data owner]
(reify
om/IRender
(render [_]
(dom/div nil (pr-str data)))))
(go (while true
(async/<! (async/timeout 1000))
(om/transact! (om/root-cursor app-state) :time inc)))
(defn main []
(om/root
clock-view
app-state
{ :target (. js/document (getElementById "clock"))}))
我对此的问题是这不是可重新加载的代码。一旦我通过fig wheel刷新代码,递增速度会变得更快,因为有几个正在更新状态的东西。
我尝试了各种想法(基本上是使不同的组件拥有go语句代码),但我无法想出可以工作的东西。
有人有一个简洁的解决方案吗?还是我只能在开发过程中坚持下去?
alts!
或类似方法]。如果关闭通道关闭了,那么你就退出循环,在IWillUnmount中关闭它。 - Charles Duffy