【问题标题】:How to render dom components in reagent asynchronously?如何异步渲染试剂中的dom组件?
【发布时间】:2020-03-02 07:22:26
【问题描述】:

我发出一个 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】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 2016-02-12
      • 2019-07-21
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多