如何用clojurescript用试剂做ajax请求?
发布时间:2020-12-15 23:13:57 所属栏目:百科 来源:网络整理
导读:假设我有一个组件需要在渲染之前从服务器请求一些数据. 我现在拥有的是与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-dat
假设我有一个组件需要在渲染之前从服务器请求一些数据.
我现在拥有的是与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库函数. 这有效,但我不觉得这是回调的正确方法. 在试剂/ clojurescript中有没有更好,更干净的方式来做这种ajax请求? 解决方法
最常见的请求方式是cljs-http.将[cljs-http“0.1.39”]添加到project.clj中的依赖项中,然后重新启动终端中的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可以在一个看似顺序代码的单个块中以合理的方式链接在一起,但是异步发生. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |