如何用clojurescript用试剂做ajax请求?

时间:2016-06-09 17:55:54

标签: clojurescript reagent

假设我有一个组件需要在渲染之前从服务器请求一些数据。

我现在拥有的是与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库函数。

这样可行,但我觉得这不是回调的正确方法。 更不用说我是否需要GET基于我得到的第一个数据的其他数据,然后基于它的其他数据,它将是一个非常讨厌的回调链。

在试剂/ clojurescript中有没有更好,更干净的方式来做这种ajax请求?

1 个答案:

答案 0 :(得分:6)

提出请求的最常用方法是cljs-http。将with open('file') as f: r = [x.rstrip('\n').split('\n') for x in f.read().split('\n\n')] 添加到[cljs-http "0.1.39"]中的依赖项中,然后重新启动终端中的figwheel进程以获取新的依赖项。

project.clj

Cljs-http是管理HTTP请求的好方法。它使用core.async通道来提供结果。现在,您需要关注的是http / get和http / post调用应该在go表单中发生,结果是一个可以读取结果的通道

依赖的http gets可以在一个看似顺序代码的go块中以合理的方式链接在一起,但是异步发生。

相关问题