考虑以下假设的、简化的 clojurescript 片段:
(def cat (r/atom [{:id 0 :data {:text "ROOT" :test 17} :prev nil :par nil}
{:id 1 :data {:text "Objects" :test 27} :prev nil :par 0}
{:id 2 :data {:text "Version" :test 37} :prev nil :par 1}]))
(defn categorymanager [s]
[:div
[:> Reactable.Table
{:data (clj->js
s
)}
]
]
)
(defn content []
(fn []
[:div
[:h1 "Test"]
(categorymanager (select [ALL :data] (t/tree-visitor @cat)))
[re-com/button :label "Do not click!"]
]
))
content 函数准备一个 Reagent 组件。代码片段按预期工作。(“选择”函数是 Spectre 库的一部分。)
我想添加最小的重新框架代码,以便当 cat atom 更改时,例如使用 REPL 中的函数,浏览器中的 React.js 组件会更改。我知道关于重新构建订阅和处理程序的理论,但只是在理论上,因为我无法让它在这样一个最小的例子中工作。它是如何完成的?如何使用 Re-frame 订阅和处理程序将更改推送到 Reagent 组件?