Asynchronous 如何在试剂中异步呈现dom组件?

Asynchronous 如何在试剂中异步呈现dom组件?,asynchronous,clojurescript,reagent,Asynchronous,Clojurescript,Reagent,我发出http请求并尝试将返回的val放入试剂组件中,如下所示: [div (a/take! (http/get "http://localhost:5000/data")) #(into [:div] (map render-method (into [] (map (fn [res] (:name res)) (-> % :body :results))))

我发出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!它本身不返回组件。那么如何使异步get请求与试剂一起工作呢?

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

(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"])])