時計アプリのようなものを書きたいと思います。状態は基本的に、繰り返しインクリメントされる数値です。その方法の 1 つをここで見ることができます。
(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 ステートメント コードを所有するさまざまなコンポーネントを作成する) を試してみましたが、機能するものを思いつくことができませんでした。
誰かがこれに対するきちんとした解決策を持っていますか、それとも開発中にそれに固執する必要がありますか?