clojure:试剂:如何制造反应原子

时间:2016-11-15 17:18:41

标签: clojure reagent

Github的/谷歌

我知道Google / Github的答案就在那里。 (我知道这是可能的,因为我在过去的某些时候阅读过它的文档。)但是,我似乎根本找不到它。

一般背景

Clojure Reagent有一个" r / atom"形式

  (def some-input (r/atom ""))

然后,如果我定义一个组件,比如:

(fn []
  [:div @some-input])

它具有以下属性:当some-input atom更改时,div会更新。

反应原子

Clojure Reagent有一个名为" reaction"的东西,我们可以定义:

(def ra (r/atom ""))
(def rb ... I HAVE NO IDEA WHAT TO PUT HERE ...)

具有@rb =(f @ra)的属性 - 这样每当ra更新时,rb会自动更新为(f @ra)

我相信这被称为"反应原子"或某事 - 但我无法找到它。

实际问题:

我在:

中加入什么
(def rb ... I HAVE NO IDEA WHAT TO PUT HERE ...)

编辑已解决:

它已记录https://github.com/Day8/re-frame (另一个非常酷的项目,也使用Reagent)

具体的例子是:

(def app-db  (reagent/atom {:a 1}))           ;; our root ratom  (signal)

(def ratom2  (reaction {:b (:a @app-db)}))    ;; reaction wraps a computation, returns a signal
(def ratom3  (reaction (condp = (:b @ratom2)  ;; reaction wraps another computation
                         0 "World"
                         1 "Hello")))

1 个答案:

答案 0 :(得分:3)

从问题中复制答案只是为了将问题标记为已解决:

(def app-db  (reagent/atom {:a 1}))           ;; our root ratom  (signal)

(def ratom2  (reaction {:b (:a @app-db)}))    ;; reaction wraps a computation, returns a signal
(def ratom3  (reaction (condp = (:b @ratom2)  ;; reaction wraps another computation
                     0 "World"
                     1 "Hello")))