我有一些类似的试剂成分,可以以某些方式呈现给定的数字:
(defn plain-number [n]
[:h1 n])
(defn pie-chart [n]
(render-fancy-chart n))
还有一些(简化的)状态:
(def state (r/atom {:a 5 :b 10 :c 7}))
而且我知道如何编写一个组件,它可以访问该状态并使用其中一个组件来呈现状态:
(def fetch-and-render-pie [k]
(let [v (get @state k)]
[pie-chart v]))
[fetch-and-render-pie :a] ; renders pie with 5
到目前为止,一切都很好。但这是耦合和重复的。
目标:
装饰器会很好,它可以获取一些状态并将其传递给孩子。用法如下所示:
[fetch :a
[pie-chart]]
可能的解决方案:
(defn fetch [k wrapped]
(let [v (get @state k)]
(conj wrapped v)))
这行得通,但它与组件定义的向量相混淆,并且它假定了许多包装组件的参数。对于链式装饰器来说,它失败了。
必须有一个聪明而强大的解决方案。有任何想法吗?