我一直在尝试解决这个错误一段时间,但它没有回避。这个问题与for循环有关,因为当我将它移除时,对组件的调用被限制为一个,但是对它继续被调用。这导致我想消除的无限POST调用。简而言之,组件不断被渲染,而不仅仅是加载页面。ClojureScript试剂组件不断刷新,导致多次POST呼叫
(defn get-messages []
"Gets the messages from the server"
(let [response (r/atom "")]
(fn []
(POST "/get" {:handler #(reset! response %)})
[:div
(for [item @response]
[:div
[:h3.you (first item)]
[:p (second item)]])])))
我把它就像任何其他成分:
(defn test []
[:div
[get-messages]])
该职位得到的数据只是
(["Bill" "What is the weather today?"] ["Jim" "The weather is warm"])
编辑
我意识到了错误我与懒惰seq没有任何关系。对不起,不清楚,但错误是与呈现一个对象与POST在其中。 AJAX被不断调用。要解决它,我包括:
(:require-macros [cljs.core.async.macros :as cam])
[clojure.core.async :as ac]
然后我用这周围的POST:
(cam/go
(<! (ac/timeout 500))
(POST "/ajax/get-message" {:handler #(reset! response %)}))
谢谢大家的耐心。
干杯, 马特
间距主要是因为我很难用正确的缩进在Stackoverflow中输入它。我会尝试一下vec。 – phlie
@phlie非常容易理解,但是如果您希望其他人能够读取您的代码,这很重要 - 我最大的疑问就是,您似乎没有关闭最后一行的'for'循环(剩下9个) parens在你的代码中,只有8个正确的parens)...不知道这是否是复制/粘贴错误,但... – Josh
@phlie再次查看代码后,我意识到我犯了一个错误,在上面修改它。以前的结果是一个双嵌套向量,当你想要上面的扁平结构时,我想。请验证上面的输出具有您想要的结构,我认为它的确如此 - 如果是这样,那么上面的代码现在是正确的。 – Josh