首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ajax与Reagent

Ajax与Reagent
EN

Stack Overflow用户
提问于 2015-05-05 18:25:14
回答 1查看 4.1K关注 0票数 10

我正在从我的Reagent应用程序中进行Ajax获取,以便从数据库中加载一些内容。

考虑到如果我将这种ajax调用放入一个原子中,那么当一个原子被取消引用时,Reagent会自动地重新呈现一个组件,这意味着我得到了一个无限序列的ajax调用,我不完全确定获得这样的ajax调用结果的最佳方式是什么。

对于一些代码,

代码语言:javascript
复制
(def matches (atom nil))

(defn render-matches [ms]
  (reset! matches (into [:ul] (map (fn [m] ^{:key m}[:li m])
                                   (walk/keywordize-keys (t/read (t/reader :json) ms)))))

这个函数基本上创建了一个[:ul [:li "Stuff here"] [:li "And here"]]

我想要显示在我的页面上,它现在有以下代码。

代码语言:javascript
复制
(defn standings-page []
  (GET "/list-matches"
       {:handler render-matches})
  @matches)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-09 07:13:49

我认为最好只将数据保存在原子中,并将HTML生成为组件逻辑的一部分。

另外,最好在呈现阶段之外触发AJAX调用,例如,在组件挂载之前,或者作为事件的结果(例如,单击按钮)。

如下所示:

代码语言:javascript
复制
(def matches (atom nil))
(defn component []
  (let [get-stuff (fn [] (GET "/..." :handler (fn [response] 
                           (reset! matches (:body response))))]
    (get-stuff) <-- called before component mount
    (fn []
      [:ul
        (for [m match]
          ^{:key ...} 
          [:li ...])])))

这在这个职位中称为form-2。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30060533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档