Asynchronous 如何在试剂中异步呈现dom组件?
我发出http请求并尝试将返回的val放入试剂组件中,如下所示: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))))
[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"])])