首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Reagent组件编写解码器

如何为Reagent组件编写解码器
EN

Stack Overflow用户
提问于 2017-06-13 10:55:12
回答 1查看 405关注 0票数 2

我有一些类似的试剂成分,它们可以以某种方式呈现给定的数字:

代码语言:javascript
复制
(defn plain-number [n]
  [:h1 n])

(defn pie-chart [n]
  (render-fancy-chart n))

还有一些(简化的)状态:

代码语言:javascript
复制
(def state (r/atom {:a 5 :b 10 :c 7}))

我知道如何编写一个组件,该组件可以访问该状态并使用其中一个组件呈现状态:

代码语言:javascript
复制
(def fetch-and-render-pie [k]
   (let [v (get @state k)]
     [pie-chart v]))

[fetch-and-render-pie :a] ; renders pie with 5

到现在为止还好。但这是耦合的,重复的。

目标是:

一个装饰师会很好,它可以获取一些状态并将其传递给孩子。其用法如下所示:

代码语言:javascript
复制
[fetch :a
  [pie-chart]]

可能的解决办法:

代码语言:javascript
复制
(defn fetch [k wrapped]
  (let [v (get @state k)]
    (conj wrapped v)))

这是可行的,但它扰乱了组件定义的向量,并且假定了许多包装好的组件的参数。但对连锁装潢师来说却失败了。

必须有一个聪明而有力的解决方案。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-06-14 07:06:21

仅限于试剂,我们可以使用游标

代码语言:javascript
复制
(defn com-a [state]
  (fn []
    [:h1 @state]))

(defn fetch [db]
  (let [state (reagent/cursor db :k)] ; assume {:k "dd"}
    (fn []
      [com-a state])))

重框架

代码语言:javascript
复制
(re-frame/reg-sub
  :chart-data
  (fn [db [_ query]]
    (get-in db query)))

(defn com-a [state]
  (fn []
    [:h1 @state]))

(defn fetch [db]
  (let [state (re-frame/subscribe [:chart-data [:k]])]
    (fn []
      [com-a state])))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44519512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档