Я пытался исправить эту ошибку некоторое время, но это ускользает от меня. Проблема имеет какое-то отношение к циклу for, потому что когда я удаляю его, вызовы компонента ограничиваются одним, но с ним он продолжает вызываться. Это приводит к бесконечным вызовам POST, которые я хочу устранить. Короче говоря, компонент сохраняется, а не просто при загрузке страницы.Компонент ClojureScript Reagent постоянно обновляется во многих 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"])
EDIT
Я понял, что я об ошибке не имел никакого отношения к ленивому сексу. Извините за неясность, но ошибка заключалась в рендеринге объекта с 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 %)}))
Спасибо всем за их терпение.
Приветствия, Matt
Интервал в основном потому, что я стараюсь вводить его в Stackoverflow с правильным отступом. Я попробую vec. – phlie
@phlie очень понятно, но важно, если вы хотите, чтобы другие могли читать ваш код - мой самый большой вопрос в том, что вы, похоже, не закрываете цикл 'for' на последней строке (у вас осталось 9 parens в вашем коде и только 8 правых паренс) ... не знаю, была ли это ошибка копирования/вставки, но ... – Josh
@phlie После того, как я снова посмотрел на код, я понял, что сделал ошибку и изменил его выше. Раньше результатом был двойной вложенный вектор, если вы хотите более плоскую структуру выше, я думаю. Пожалуйста, убедитесь, что выведенный выше результат имеет структуру, которую вы хотите, и я думаю, что это так - если это так, то код выше теперь корректен. – Josh