在给定我的项目的情况下,我正在朝着使用试剂的合适状态设计的方向发展,并且仍然使用不同的原子(我可能会切换到单个原子,但目前正在尝试探索可能性的空间),我已经尝试在根组件的词法上下文中设置所有状态,如下图所示。想法是这app-state
是一个普通的 clojure 映射,其中每个键的值是一个试剂原子。
它接收一个attrs
作为 prop 的映射(来自data-
html 元素上的 attrs),它的工作是初始化一个app-state
映射,该映射本身不是 a r/atom
,而是包含r/atom
s。问题是,所有这些r/atom
s 都是defonce
在文件顶部声明时定义的,这就是我刚刚切换的内容,现在defonce
语义丢失了,并且 figwheel 热重载被破坏了。
有没有办法在以这种风格设置状态时保留可重新加载的代码?
我不能把 adefonce
放在里面 a let
,因为随后的评估时间将评估为零。
或者我在这里缺少一些模式。
(defn a-root-component [attrs]
(let [app-state {:some-state (r/atom (:some-state attrs))}]
(fn [attrs]
[some-component app-state])))