【问题标题】:Why does Reagent render JSON in three ways?为什么 Reagent 会以三种方式呈现 JSON?
【发布时间】:2016-02-08 22:30:01
【问题描述】:

我正在尝试从 Clojurescript/Reagent 中的 API 调用呈现 JSON 数据。当我使用 js/alert 时,我看到了我期望的 json:["Sue" "Bob"]

(defn- call-api [endpoint]
  (go
    (let [response (<! (http/get endpoint))]
      (:names (:body response)))))

;; -------------------------
;; Views

(defn home-page []
  [:div (call-api "/api/names")])

这就是我引用库的方式(以防出现问题)。

(ns myapp.core
    (:require [reagent.core :as reagent :refer [atom]]
              [reagent.session :as session]
              [cljs-http.client :as http]
              [cljs.core.async :refer [<! >!]]
              [secretary.core :as secretary :include-macros true]
              [accountant.core :as accountant])
    (:require-macros [cljs.core.async.macros :refer [go]]))

但是当我将它记录到控制台时,我得到了一个看起来与 API 响应完全不同的长哈希。浏览器呈现“00000000000120”。

  • 为什么这些结果不同? (浏览器、警报窗口、控制台消息)
  • 如何让我在警报窗口中看到的内容呈现在页面上?

【问题讨论】:

    标签: json clojure reactjs clojurescript reagent


    【解决方案1】:

    当您调用 call-api 时,它将返回一个 go 块。与其尝试直接在您的 Reagent 函数中使用该 go 块,您可以改为更新随机数中的返回值。

    (def app-state (atom)) ;; ratom
    
    (defn- call-api [endpoint]
      (go
        (let [response (<! (http/get endpoint))]
          (reset! app-state (:names (:body response))))))
    
    (defn home-page []
      [:div @app-state])
    
    (defn main []
      (call-api))
    

    【讨论】:

    • 谢谢,丹尼尔。您能否扩展“您将需要 >!? defn home-page 中应该包含的代码 sn-p 将是最有帮助的。 :)
    • 我已经用一个(未经测试的)代码 sn-p 更新了我的答案,它应该显示一般的想法。
    • 大成功!不知道为什么他必须通过一个原子,但这会让我前进。谢谢!
    • 加入 Clojurians Slack,#reagent 频道可以进一步解释推理:)
    猜你喜欢
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多