Lov*_*ing 8 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))
Run Code Online (Sandbox Code Playgroud)
该setup功能是国外一些JS库函数有副作用.
这有效,但我不觉得这是回调的正确方法.更不用说我是否需要GET基于我得到的第一个数据的其他数据,然后基于它的其他数据,它将是一个非常讨厌的回调链.
在试剂/ 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))))
Run Code Online (Sandbox Code Playgroud)
Cljs-http是管理HTTP请求的好方法.它使用core.async通道来提供结果.现在,您需要关注的是http/get和http/post调用应该在go表单中发生,结果是一个可以读取结果的通道
依赖的http gets可以在一个看似顺序代码的单个块中以合理的方式链接在一起,但是异步发生.
| 归档时间: |
|
| 查看次数: |
2902 次 |
| 最近记录: |