试剂不注册原子手表

Reagent does not register atom watch

我有一个简单的新人luminus with reagent申请。 我定义了一些组件定义:

(def md-vals (atom nil))

(defn markdown [url]
  (GET
    (str js/context url)
    {:handler
     (fn [response]
       (swap! md-vals assoc url response)
       (js/alert (str "loaded\n" (subs response 1 100))))})
  (fn [] [:p (get @md-vals url "loading...")]))

作为页面组件的用法:

(defn docs [] [markdown "/md/docs.md"])

最后是页面绑定:

(defn init! []
  ...
  (render-component (docs)  (.getElementById js.document "docs")))

除原子状态切换通知外,一切正常。在成功获取资源时,我看到了预期的 alert 消息,但是页面的相应区域没有切换。

Chrome 调试器显示在原子切换时刻原子的 watches 属性 是空的 (null),因此没有触发通知。

我的方法可能有什么问题?

您应该使用 reagent.core/atom 而不是常规的 Clojure atom。将此添加到您的命名空间 :require:

[reagent.core :as reagent :refer [atom]]