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

问题描述 投票:0回答:1

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

asynchronous clojurescript reagent
1个回答
1
投票

您不能这样做。取而代之的是,您需要将结果存储在原子中,并且一旦加载,试剂将为您重新渲染。

(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"])])
© www.soinside.com 2019 - 2024. All rights reserved.