asynchronous - 如何异步渲染试剂中的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! 本身不返回组件。那么如何使异步获取请求与试剂一起使用呢?
解决方案
你不能这样做。相反,您需要将结果存储在原子中,一旦加载,试剂将为您重新呈现。
(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"])])
推荐阅读
- sql - 将 ASCII 表中的所有字符插入一个字段
- javascript - mapFn 在 map(mapFn, thisArg) 中代表什么?
- sql - 为什么我无法删除 postgres 数据库
- sapui5 - 绑定模型更改时 VizFrame 不更新
- json - 缺少字段的 JSON 结构 - 需要建议 - 这是一种好习惯吗?
- ios - SwiftUI:使用 .position() 时对齐前沿
- javascript - Scrapy xpath 不提取包含特殊字符的 div <%=
- shopify - 具有代理扩展 PUT 请求的 Shopify 应用程序不起作用
- postman - 如何使用 Postman API 保存响应作为示例
- html - CSS的问题