如何使用试剂在 clojurescript 中执行 ajax 请求?
how to do ajax request in clojurescript with 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
基于我得到的第一个数据的其他数据,然后基于它的其他数据,这将是一个非常讨厌的回调链。
在 reagent/clojurescript 中是否有更好、更简洁的方法来处理这种 ajax 请求?
最常见的请求方式是cljs-http。在project.clj
中添加[cljs-http "0.1.39"]
依赖,在终端重启figwheel进程,获取新的依赖。
(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 是管理 HTTP 请求的好方法。它使用 core.async 个渠道来传递结果。现在,您需要关注的是 http/get 和 http/post 调用应该发生在 go 表单中,结果是一个可以读取其结果的通道
依赖的 http gets 可以在单个 go 块中以合理的方式链接在一起,看起来像顺序代码,但异步发生。
假设我有一个组件需要在渲染之前从服务器请求一些数据。
我现在拥有的是 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
基于我得到的第一个数据的其他数据,然后基于它的其他数据,这将是一个非常讨厌的回调链。
在 reagent/clojurescript 中是否有更好、更简洁的方法来处理这种 ajax 请求?
最常见的请求方式是cljs-http。在project.clj
中添加[cljs-http "0.1.39"]
依赖,在终端重启figwheel进程,获取新的依赖。
(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 是管理 HTTP 请求的好方法。它使用 core.async 个渠道来传递结果。现在,您需要关注的是 http/get 和 http/post 调用应该发生在 go 表单中,结果是一个可以读取其结果的通道
依赖的 http gets 可以在单个 go 块中以合理的方式链接在一起,看起来像顺序代码,但异步发生。