首页 > 解决方案 > 如何异步渲染试剂中的dom组件?

问题描述

我发出一个 http 请求并尝试将返回的 val 放入试剂组件中,如下所示:

[div
    (a/take! (http/get "http://localhost:5000/data"))
             #(into [:div]
                     (map render-method
                          (into [] (map (fn [res] (:name res)) (-> % :body :results))))

                     )
                )
]

但这可以理解是行不通的,因为 a/take! 本身不返回组件。那么如何使异步获取请求与试剂一起使用呢?

标签: asynchronousclojurescriptreagent

解决方案


你不能这样做。相反,您需要将结果存储在原子中,一旦加载,试剂将为您重新呈现。

(def data (reagent/atom nil))

(defn fetch-data []
  (take! (http/get "http://localhost:5000/data") #(reset! data %)))

(defn names-list []
  [:div
   (doall (map :name @data))])

(defn my-component []
  [:div
   (if @data
     [names-list]
     [:div "loading"])])

推荐阅读