假设我有一个组件,它需要在呈现之前从服务器请求一些数据。
我现在拥有的是类似于cljs-ajax库的东西:
(def data (r/atom nil))
(defn component [id]
(r/create-class {:reagent-render simple-div
:component-did-mount (partial get-data id)}))
(defn get-data [id]
(GET (str "/api/" id)
{:handler init}))
(defn init [response]
(let [data1 (:body response)
data2 (compute data1)
data3 (compute2 data2)]
(reset! data (compute3 data1))
(.setup @data data1)
(.setup2 @data data2)
(.setup3 @data data3))setup函数是国外一些具有副作用的JS库函数。
这是可行的,但我觉得这不是做回调的正确方法。更不用说,如果我需要基于我得到的第一个数据,然后是基于第一个数据的其他数据,那么这将是一个非常糟糕的回调链。
有没有一种更好、更干净的方法在试剂/文本中完成这种ajax请求?
发布于 2016-06-12 03:10:29
最常见的提出请求的方法是cljs。将[cljs-http "0.1.39"]添加到project.clj中的依赖项中,并在终端中重新启动配置进程以获取新的依赖项。
(ns my.app
(:require
[cljs.core.async :refer [<!]] [cljs-http.client :as http])
(:require-macros [cljs.core.async.macros :refer [go]])
(go (let [response (<! (http/get "data.edn"))]
(prn (:status response))
(prn (:body response))))Cljs是管理HTTP请求的一种很好的方法。它使用core.async通道来传递其结果。现在,您需要关注的是http/get和http/post调用应该发生在go表单中,其结果是一个可以将其结果读取到
依赖的http gets可以在一个类似顺序代码但异步发生的go块中以合理的方式链接在一起。
https://stackoverflow.com/questions/37733045
复制相似问题