如何处理 cljs-ajax 响应?
How to handle cljs-ajax responses?
我正在从一个带有 cljs-ajax 的 clojurescript 前端向一个 API 发出一个请求,这个 API 以 JSON 响应,但似乎我需要在我之前做一些事情可以在cljs中使用。
(defn all-pieces []
(GET "/art/pieces" {:handler ajax-success-handler}))
当我初始化我的应用程序状态时,我分配了密钥 :all-pieces (all-pieces)
当我在组件中迭代 :all-pieces
时,我收到错误 Uncaught Error: [object Object] is not ISeqable
。
(defn pieces-component []
[:ul (for [piece (:all-pieces @app-state)]
[:li (art-piece piece)])])
编辑普拉特利:
下面的代码现在导致 all-pieces
的状态为 {}
,看到什么错误了吗?
;; -------------------------
;; Remote Data
(defn all-pieces [handler]
(GET "/art/pieces" {:handler handler}))
;; -------------------------
;; State Management
(def app-state (atom
{:doc {}
:saved? false
:page-state {}
:all-pieces {}}))
(defn set-pieces-fresh []
(all-pieces (fn [pcs] swap! app-state assoc :all-pieces pcs)))
不要将 :all-peices
设置为 (all-pieces)
的结果。
函数 ajax-success-handler
应该改为设置 :all-peices
。
(all-pieces)
的结果是开始异步调用的结果,不是响应。响应到达时调用处理程序。
(fn [pcs] swap! app-state assoc :all-pieces pcs)
不做任何交换,as swap!需要放在括号中...它只是一个 returns pcs 的函数。考虑将其提升为命名函数,以便您可以单独对其进行测试:
(def app-state
(atom {:all-pieces {}}))
(defn pieces-handler [pcs]
(swap! app-state assoc :all-pieces pcs))
(defn fetch-pieces []
(GET "/art/pieces" {:handler pieces-handler}))
(fetch-pieces)
我正在从一个带有 cljs-ajax 的 clojurescript 前端向一个 API 发出一个请求,这个 API 以 JSON 响应,但似乎我需要在我之前做一些事情可以在cljs中使用。
(defn all-pieces []
(GET "/art/pieces" {:handler ajax-success-handler}))
当我初始化我的应用程序状态时,我分配了密钥 :all-pieces (all-pieces)
当我在组件中迭代 :all-pieces
时,我收到错误 Uncaught Error: [object Object] is not ISeqable
。
(defn pieces-component []
[:ul (for [piece (:all-pieces @app-state)]
[:li (art-piece piece)])])
编辑普拉特利:
下面的代码现在导致 all-pieces
的状态为 {}
,看到什么错误了吗?
;; -------------------------
;; Remote Data
(defn all-pieces [handler]
(GET "/art/pieces" {:handler handler}))
;; -------------------------
;; State Management
(def app-state (atom
{:doc {}
:saved? false
:page-state {}
:all-pieces {}}))
(defn set-pieces-fresh []
(all-pieces (fn [pcs] swap! app-state assoc :all-pieces pcs)))
不要将 :all-peices
设置为 (all-pieces)
的结果。
函数 ajax-success-handler
应该改为设置 :all-peices
。
(all-pieces)
的结果是开始异步调用的结果,不是响应。响应到达时调用处理程序。
(fn [pcs] swap! app-state assoc :all-pieces pcs)
不做任何交换,as swap!需要放在括号中...它只是一个 returns pcs 的函数。考虑将其提升为命名函数,以便您可以单独对其进行测试:
(def app-state
(atom {:all-pieces {}}))
(defn pieces-handler [pcs]
(swap! app-state assoc :all-pieces pcs))
(defn fetch-pieces []
(GET "/art/pieces" {:handler pieces-handler}))
(fetch-pieces)